我正在使用Django 2.2和Django REST框架
DRF设置为
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'tools.rest_framework.pagination.StandardResultsPagination',
'PAGE_SIZE': 10,
}
其中,分页类被自定义为删除下一页和上一页的URL,并使用页码。
class StandardResultsPagination(PageNumberPagination):
def get_next_link(self):
if not self.page.has_next():
return None
return self.page.next_page_number()
def get_previous_link(self):
if not self.page.has_previous():
return None
return self.page.previous_page_number()
我有两个视图,我想自定义每页的记录数量
class DataCreateListView(generics.ListCreateAPIView):
serializer_class = DataSerializer
pagination.PageNumberPagination.page_size = 20
class DataMinimalListView(generics.ListAPIView):
serializer_class = DataMinimalSerializer
pagination.PageNumberPagination.page_size = 5
定义的URL是
urlpatterns = [
path('data/minimal/', views.DataMinimalListView.as_view()),
path('data/', views.DataCreateListView.as_view())
]
但是当我访问路径时
https://example.com/data/
它只提供了5条记录,而不是20条。
但是当我从CCD_ 2中移除CCD_。
这是因为PageNumberPagination.page_size
在服务器启动期间获得5
作为最后一个值。也就是说,分页类将使用当前模块上page_size
的上次接收值
IMO,在视图类上设置.page_size
属性不是一个优雅的解决方案。设置分页类的page_size_query_param
属性。
class StandardResultsPagination(PageNumberPagination):
page_size_query_param = 'size' # items per page
def get_next_link(self):
if not self.page.has_next():
return None
return self.page.next_page_number()
def get_previous_link(self):
if not self.page.has_previous():
return None
return self.page.previous_page_number()
然后,您可以使用size
查询参数作为来控制每页的项目
https://example.com/data/?size=10