我ViewSet
用这样的重写list
方法创建了一个类:
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
,因为他们有一个特定的查询集,但我怎么分页列表?
您只需要get_paginated_reponse
在paginator上调用method即可,而不是返回Response
。如果仅是单个视图集
class MyViewSet(views.ViewSet):
def list(self, request):
data = [
{"id": 1},
{"id": 2},
]
paginator = LinkHeaderPagination()
page = paginator.paginate_queryset(data, request)
if page is not None:
return paginator.get_paginated_response(page)
return Response(data)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句