2016-11-09 59 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' –

相关问题