python - 使用带有restframework的Django Pagination转到特定页面
问题描述
我有一个关于在 Django restframework 中使用分页转到特定页面的问题。(数据需要渲染成 HTML)
例子:
模型.py
class Book(models.Model):
title = models.CharField(max_length=30)
author = models.CharField(max_length=30)
视图.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
我希望有人可以帮助我。
解决方案
您可以通过子类化来制作自己的分页器,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
推荐阅读
- javascript - 为什么重定向页面加载在同一浏览器窗口中的当前页面之上?
- java - 使用函数的结果作为新函数的参数,但为什么会出现异常?
- vb.net - 在 Microsoft Access 数据库中插入当前日期?
- r - 在循环中同时使用子集和整个数据帧
- node.js - Node/React App 返回“SyntaxError: Unexpected token import”错误
- python - 首次尝试上传 URL 会返回 Exception_OverUrlUploadLimits
- python - Python Kivy 职位
- r - 仅在 plotly boxplot 中标记异常值
- python - 使用其他已知列值的 Pandas Dataframe fillna()
- c# - Asp.Net Core 2.x 中间件语法