django rest框架全局分页不与ListCreateAPIView一起使用

时间:2017-08-02 11:58:33

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

我的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休息框架&#39; pagination docs

  

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

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

2 个答案:

答案 0 :(得分:1)

来自LimitOffsetPagination的说明:

  

此分页样式反映了查找多个数据库记录时使用的语法。客户包括&#34;限制&#34;和#34;偏移&#34;查询参数。限制表示要返回的最大项目数,相当于其他样式中的page_size。偏移量表示查询相对于整套未标记项目的起始位置。

因此,如果您想使用limit,则需要将offsetLimitOffsetPagination作为GET参数传递:https://api.example.org/accounts/?limit=100&offset=400

或者您可以改为使用PageNumberPagination

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

答案 1 :(得分:1)

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

我必须从

更改我的网址定义
url(r'^dashboard/users$', views.UserList.as_view())

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

尾随/做了伎俩