【发布时间】:2017-02-17 20:50:40
【问题描述】:
我的设置:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 2
}
我的分页类:
from rest_framework.pagination import PageNumberPagination
class CustomNumberPagination(PageNumberPagination):
page_size = 5
我的测试视图类:
from rest_framework.pagination import PageNumberPagination
from .pagination import CustomNumberPagination
class Testing(generics.GenericAPIView):
queryset = Testing.objects.all()
serializer_class = TestingSerializer
pagination_class = CustomNumberPagination
def get(self, request):
print PageNumberPagination.page_size # 2
print self.pagination_class.page_size # 5
queryset = self.get_queryset()
serializer = self.serializer_class(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
我可以在控制台中正确打印出 PageNumberPagination 和 CustomNumberPagination 的 page_size。
但是,将page 作为参数传递没有任何效果。我无法让每个视图中的全局分页或 pagination_class 工作。我不确定出了什么问题,但似乎大多数人都做了同样的事情,只是为他们工作。如有任何建议,我将不胜感激。
更新
刚刚从下面我选择的答案中获得了一些灵感。
由于我将不得不在覆盖的get() 中编写大量自定义设置,因此我刚刚更新了我的get():
from rest_framework.pagination import PageNumberPagination
from .pagination import CustomNumberPagination
class Testing(generics.GenericAPIView):
queryset = Testing.objects.all()
serializer_class = TestingSerializer
pagination_class = CustomNumberPagination
def get(self, request):
queryset = self.get_queryset()
page = self.request.query_params.get('page')
if page is not None:
paginate_queryset = self.paginate_queryset(queryset)
serializer = self.serializer_class(paginate_queryset, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.serializer_class(queryset, many=True)
return Response(serializer.data)
【问题讨论】:
-
注意 self.request.query_params.get('page') - 如果没有指定页面,您的端点将返回查询集中的所有对象 :) 通常在这种情况下最好先返回页。所以 ...get('page', 1)
-
感谢您的友好提醒:D 我将不得不将
page设为可选,因为我们的 FE 现在不支持分页。
标签: python django django-rest-framework django-pagination