【问题标题】:django rest framework global pagination not working with ListCreateAPIViewdjango rest 框架全局分页不适用于 ListCreateAPIView
【发布时间】:2018-01-09 15:28:44
【问题描述】:

我的settings.py中有以下内容

REST_FRAMEWORK = {
     'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
     'PAGE_SIZE': 50
       }

urls.py

url(r'^dashboard/users$', views.UserList.as_view()),

还有视图本身

class UserList(generics.ListCreateAPIView):
     queryset = User.objects.all()
     serializer_class = UserSerializer

当我尝试访问/dashboard/users/?page=1 时,我在调试模式下得到一个带有以下网址的404 error:

^dashboard/users$
^dashboard/users\.(?P<format>[a-z0-9]+)/?$

根据 Django rest 框架的pagination docs:

仅当您使用通用视图或视图集时,才会自动执行分页。如果您使用的是常规 APIView,则需要自己调用分页 API 以确保返回分页响应。有关示例,请参阅 mixins.ListModelMixin 和 generics.GenericAPIView 类的源代码。

我已经在这里使用通用视图,那为什么这不起作用?

【问题讨论】:

  • 你没有在你的settings.py中设置PAGE_SIZE
  • 我已经在代码中设置了,粘贴时离开了,我已经更新了问题

标签: python django django-rest-framework django-generic-views django-pagination


【解决方案1】:

除了来自@neverwalkaloner 的有用建议外,我仍然看到404 错误。我原来是由于网址不匹配

我不得不更改我的 url 定义

url(r'^dashboard/users$', views.UserList.as_view())

到

url(r'^dashboard/users/$', views.UserList.as_view())

尾随 / 成功了

【讨论】:

    【解决方案2】:

    来自LimitOffsetPagination的描述:

    这种分页样式反映了查找多个数据库记录时使用的语法。客户端包括“限制”和“偏移”查询参数。 limit表示返回的最大item数,相当于其他样式的page_size。偏移量表示查询相对于完整的未分页项集的起始位置。

    所以如果你想使用LimitOffsetPagination,你需要传递limit和offset作为GET参数:https://api.example.org/accounts/?limit=100&amp;offset=400

    或者您可以使用PageNumberPagination 代替:

    REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 100
    }
    

    【讨论】:

    • 了解,但即使在进行了必要的更改后,我还是看到了 404 错误。我需要在 URL conf 中传递什么特别的东西吗?为什么网址不匹配?
    猜你喜欢
    • 2017-11-27
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2014-12-31
    • 2016-06-20
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    相关资源
    最近更新 更多