【问题标题】:Go to specific page using Django Pagination with restframework使用带有rest框架的Django Pagination转到特定页面
【发布时间】:2021-06-28 07:14:25
【问题描述】:

我有一个关于在 Django restframework 中使用分页转到特定页面的问题。 (数据需要渲染成HTML)

例子:

模型.py

class Book(models.Model):
    title = models.CharField(max_length=30)
    author = models.CharField(max_length=30)

views.py

class BookListView(viewsets.ModelViewSet):
    permission_classes = (AllowAny, )
    template_name = 'booklist.html'
    queryset = Book.objects.all()
    renderer_classes = [TemplateHTMLRenderer]
    pagination_class = BookPagination
    serializer_class = BookSerializer

    def list(self, request):
        queryset = Book.objects.all()
        serializer = ProtocolSerializer(queryset, many=True)
        page = self.paginate_queryset(serializer.data)
        return self.get_paginated_response(page)

我可以使用上面的代码显示分页项目。 HTML 中有下一个和上一个链接。 但是,我需要像 [1,2,3,....] 这样的页面列表,而不仅仅是下一个和上一个。 我只需单击按钮 3 即可查看第 3 页上的数据。 我需要一些步骤来做到这一点。

1:检索目标页码(我不知道怎么做)

2:获取该页面的数据

3:呈现为 HTML

我希望有人可以帮助我。

【问题讨论】:

  • 超出范围的问题:您正在使用rest_framework 来呈现html?
  • 我认为你需要使用带有分页的过滤器stackoverflow.com/questions/63904087/…>

标签: python django pagination


【解决方案1】:

您可以通过子类化PageNumberPagination 来制作自己的分页器,以将所有可用页面的列表添加到响应中:

class AllPageNumberPagination(PageNumberPagination):

    def get_paginated_response(self, data):
        return Response(OrderedDict([
            ('count', self.page.paginator.count),
            ('next', self.get_next_link()),
            ('pages', self.get_all_pages_links()),
            ('previous', self.get_previous_link()),
            ('results', data)
        ]))

    def get_all_pages_links(self):
       base_url = self.request.build_absolute_uri()
        
       def page_number_to_url(page_number):
            if page_number == 1:
                return remove_query_param(base_url, self.page_query_param)
            else:
                return replace_query_param(base_url, self.page_query_param, page_number)
       
       page_numbers = range(1, self.page.paginator.num_pages + 1)

       page_links = []
       for page_number in page_numbers:
           page_links.append(page_number_to_url(page_number))

       return page_links

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 2017-06-15
    • 2014-12-15
    • 2019-05-01
    • 2015-05-10
    • 2023-03-17
    • 2018-08-06
    • 2018-08-08
    相关资源
    最近更新 更多