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' –