Django Rest Framework 的分页小于页面大小

Çağ*_*rın 2 python django pagination django-rest-framework

我在使用 Django Rest Framework 的 Pagination 类时遇到了问题。

版本:

  • Django 1.9.2
  • Django Rest 框架 3.3.2

这是我的自定义分页类。

分页.py:

from rest_framework import pagination
class VideoPagination(pagination.PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page'
    max_page_size = 10000
Run Code Online (Sandbox Code Playgroud)

设置.py:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': ('rest_framework.pagination.PageNumberPagination',),
    'PAGE_SIZE': 10,
}
Run Code Online (Sandbox Code Playgroud)

在我的 views.py 中,我有一个 ListAPIView 列出所有视频模型,它使用我的自定义分页器。

视图.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}
Run Code Online (Sandbox Code Playgroud)

问题是,当我向这个视图发出请求时,在第一页它给出了我想要的 10 个项目。然后在第二页和第三页上,它给出了不到 10 个项目。

例如,有 16 个视频项目。在第一个请求中,它给出了其中的前 10 个。在第二页的请求中,它给出了其中的 2 个。它还说还有另一页,并给出了另外 3 页。在第 4 页中,它给出了其中的 4 个。这种行为的原因可能是什么?我无法修复它,所以我请求你的帮助。

不是:在第一个 url 中,我没有添加页码。下一个 url 直接是 ?page=2。所以我猜它没有使用 ?page=1 但是当我请求 ?page=1 时,它只给出了 1 个模型。

ils*_*005 5

问题是page_size_query_param = 'page'。在这里你是说页面应该是 size page。所以一个带有的 URL?page=2会给你一个page_size2。

你想要的是page_query_param. 但它的默认值是page,所以如果你删除这一行,一切都应该有效。