我終於結束了在自定義分頁進行定製。它看起來是最整齊,最簡單的解決方案。
自定義分頁
from rest_framework import pagination
class CustomPageNumberPagination(pagination.PageNumberPagination):
"""Custom page number pagination."""
page_size = 30
max_page_size = 10000
page_size_query_param = 'page_size'
def get_page_size(self, request):
"""Get page size."""
# On certain pages, force custom/max page size.
try:
view = request.parser_context['view']
if view.action in [
'custom_page_size_view_1',
'custom_page_size_view_2',
# ...
'custom_page_size_view_n',
]:
return self.max_page_size
except:
pass
return super(CustomPageNumberPagination, self).get_page_size(request)
視圖
from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import list_route
from .pagination import CustomPageNumberPagination
class MyView(ModelViewSet):
pagination_class = CustomPageNumberPagination
@list_route()
def custom_page_size_view_1(self, request):
"""Custom page size view 1"""
@list_route()
def custom_page_size_view_2(self, request):
"""Custom page size view 2"""
@list_route()
def custom_page_size_view_3(self, request):
"""Custom page size view 3"""
你好約翰,我有一些麻煩,此代碼,基本上我有3天了學習蟒蛇,因爲我被分配來修復一個Python項目,但我仍然不太熟悉這門語言,所以我可以問你在'class ACustomViewSet'中應該在哪裏定義'N'和'self'?如果我有'mixins.CreateModelMixin'而不是'mixins.DestroyModelMixin'?會有什麼麻煩嗎?謝謝 – Frakcool
嘿@Frakcool,1)'self'在python類中不需要明確的定義。 2)'N'可以是任何正整數,表示響應每頁有多少結果。3)'DestroyModelMixin'提供了一種刪除方法,'CreateModelMixin'提供了一種創建方法,所以不會有任何問題,只需使用其中的一種或兩種! 希望這會有所幫助:) –
感謝John,從1)Python向我拋出一個'Undefined variable:self',從2和3我知道了,你認爲'self'的問題是什麼?我會繼續尋找它,等等!我想我只能說:'pagination_class.page_size = page_size'不是嗎? – Frakcool