0
我创建了一个ViewSet
类与覆盖list
方法是这样的:分页由视图集中在Django的REST框架返回列表
from rest_framework.response import Response
from rest_framework import viewsets
class MyViewSet(views.ViewSet):
def list(self, request):
return Response([
{"id": 1},
{"id": 2},
])
如何分页对此有何反应?
在settings.py
我以下设置:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'LinkHeaderPagination',
'PAGE_SIZE': 10
}
而且LinkHeaderPagination
是建立这样的:
from rest_framework import pagination
from rest_framework.response import Response
class LinkHeaderPagination(pagination.PageNumberPagination):
page_size_query_param = 'page_size'
def get_paginated_response(self, data):
next_url = self.get_next_link()
previous_url = self.get_previous_link()
if next_url is not None and previous_url is not None:
link = '<{next_url}>; rel="next", <{previous_url}>; rel="prev"'
elif next_url is not None:
link = '<{next_url}>; rel="next"'
elif previous_url is not None:
link = '<{previous_url}>; rel="prev"'
else:
link = ''
link = link.format(next_url=next_url, previous_url=previous_url)
headers = {'Link': link, 'Count': self.page.paginator.count} if link else {}
return Response(data, headers=headers)
这与ModelViewSets
的伟大工程,因为他们有一个特定的查询集,但我该怎么办分页列表?
@Oskar添加完整跟踪。这实际上也是一个单独的问题。因为你现在看到你的分页器被调用。 –
与您的确切代码,我收到此错误:'MyViewSet'对象没有'get_paginated_response' –
@Oskar属性。对不起忘了这是'ViewSet'。阅读更新。您可以使用'GenericAPIView'中的部分概括这个解决方案。并创建自己的'PaginatableViewSet' –