【问题标题】:Django rest PageNumber PaginationDjango 休息 PageNumber 分页
【发布时间】:2017-09-24 13:07:22
【问题描述】:

我有一个简单的 django rest 框架的分页类:

class StandardResultsSetPagination(PageNumberPagination):
    page_size = 100
    page_size_query_param = 'page_size'
    max_page_size = 1000

# Create your views here.
class ResultSet(generics.ListAPIView):
    queryset = Result.objects.all()
    serializer_class = ResultSetSerializer
    pagination_class = StandardResultsSetPagination

该类当前返回带有'prev''next' 键的字典,其中包含带有下一页和上一页的URL。我想要实现的是 'prev''next' 只返回页码而不是整个 URL。

我怎样才能做到这一点?

【问题讨论】:

    标签: python django pagination django-rest-framework


    【解决方案1】:

    您可以覆盖 PageNumberPagination 的 get_next_linkget_previous_link 默认为:

       def get_next_link(self):
            if not self.page.has_next():
                return None
            url = self.request.build_absolute_uri()
            page_number = self.page.next_page_number()
            return replace_query_param(url, self.page_query_param, page_number)
    
        def get_previous_link(self):
            if not self.page.has_previous():
                return None
            url = self.request.build_absolute_uri()
            page_number = self.page.previous_page_number()
            if page_number == 1:
                return remove_query_param(url, self.page_query_param)
            return replace_query_param(url, self.page_query_param, page_number)
    

    您可以覆盖:

    class StandardResultsSetPagination(PageNumberPagination):
        page_size = 100
        page_size_query_param = 'page_size'
        max_page_size = 1000
    
        def get_next_link(self):
            if not self.page.has_next():
                return None
            page_number = self.page.next_page_number()
            return page_number
    
        def get_previous_link(self):
            if not self.page.has_previous():
                return None
            page_number = self.page.previous_page_number()
            return page_number
    

    【讨论】:

    • @itts 如何将上一个重命名为上一个??键名
    • @giveJob 重命名为以前的覆盖函数 get_paginated_response 像:def get_paginated_response(self, data): return Response(OrderedDict([ ('count', self.page.paginator.count), ('next', self.get_next_link()), ('prev', self.get_previous_link()), ('results', data) ]))
    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 2013-06-28
    • 2010-10-29
    • 1970-01-01
    • 2013-05-24
    • 2015-06-30
    • 2017-02-28
    • 1970-01-01
    相关资源
    最近更新 更多