我在Django Rest Framework的分页类中遇到问题。Django Rest Framework的分页给出的页面大小小于
版本:
- 的Django 1.9.2
- Django的REST框架3.3.2
这里是我的自定义分页类。
pagination.py:
from rest_framework import pagination
class VideoPagination(pagination.PageNumberPagination):
page_size = 10
page_size_query_param = 'page'
max_page_size = 10000
settings.py:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': ('rest_framework.pagination.PageNumberPagination',),
'PAGE_SIZE': 10,
}
在我的views.py,我有一个ListAPIView,其中列出了所有的视频模式,它使用我的自定义分页程序。
views.py:
class explore(ListAPIView):
serializer_class = ExploreVideoSerializer
pagination_class = VideoPagination
def get_queryset(self):
category = self.kwargs['category']
if category == 'all':
return Video.objects.all().order_by('-date')
else:
return Video.objects.filter(category=category).order_by('-date')
def get_serializer_context(self):
return {"request": self.request}
的问题是,当我对这个观点的请求,在第一页它给10个项目这是我想要的。然后在第二页和第三页上,它给出少于10个项目。
例如,有16个视频项目。在第一个请求中,它给出了前10个。在第二页的请求中,它给出了其中2个。它还说有另外一页,并给出另外3页。在第4页中,它给出了其中的4个。什么可能是这种行为的原因?我无法修复它,所以我要求你的帮助。
不:在第一个url中,我不添加页码。下一个网址是直接?page = 2。所以我想这不是使用?page = 1,但是当我提出?page = 1的请求时,它只给出1个模型。
是的,我还以为是像page_query_param。感谢您的回答,我在阅读文档时一定会错过它。 –
有一个问题。为什么你使用CustomPagination?使用DEFAULT_PAGINATION_CLASS将会给你一个page_size = 10。 – ilse2005
这只是举例,我有几个查询有不同的页面大小。我现在没有,我可以动态改变page_size,直到现在:) –