2016-11-09 58 views
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的偉大工程,因爲他們有一個特定的查詢集,但我該怎麼辦分頁列表?

回答

1

你只需要在paginator上調用get_paginated_reponse方法,而不是返回Response。如果這只是一個單一的視圖集

​​
+0

@Oskar添加完整跟蹤。這實際上也是一個單獨的問題。因爲你現在看到你的分頁器被調用。 –

+0

與您的確切代碼,我收到此錯誤:'MyViewSet'對象沒有'get_paginated_response' –

+0

@Oskar屬性。對不起忘了這是'ViewSet'。閱讀更新。您可以使用'GenericAPIView'中的部分概括這個解決方案。並創建自己的'PaginatableViewSet' –

相關問題