📅  最后修改于: 2023-12-03 14:51:35.737000             🧑  作者: Mango
在 Django 开发中,经常需要对查询结果进行分页展示。Django 内置了一个分页类,我们可以很方便地使用它来实现分页功能。本文将介绍如何使用 Django 分页类来实现分页功能。
首先,我们需要创建一个分页类,让 Django 知道每页需要展示多少条数据。在以下代码中,我们定义了一个名为 CustomPagination
的分页类,每页展示 10 条数据。
from rest_framework.pagination import PageNumberPagination
class CustomPagination(PageNumberPagination):
page_size = 10
接下来,我们需要在视图中使用刚刚创建的 CustomPagination
分页类。以下代码展示了如何在视图中使用分页类,并将查询结果进行分页。
from rest_framework.generics import ListAPIView
from .serializers import CustomSerializer
from .models import Custom
class CustomList(ListAPIView):
queryset = Custom.objects.all()
serializer_class = CustomSerializer
pagination_class = CustomPagination
在以上代码中,CustomList
视图通过 queryset
属性获取 Custom
模型的所有对象,并通过 serializer_class
属性指定使用 CustomSerializer
进行序列化。然后,通过 pagination_class
属性指定使用刚刚创建的 CustomPagination
分页类进行分页展示。
最后,我们需要在模板中渲染分页结果。以下代码展示了如何在模板中使用 paginator
和 page_obj
变量进行分页展示。
{% for custom in page_obj %}
{{ custom }}
{% endfor %}
{% if page_obj.has_previous %}
<a href="?page=1">first</a>
<a href="?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="current-page">{{ page_obj.number }}</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">next</a>
<a href="?page={{ page_obj.paginator.num_pages }}">last</a>
{% endif %}
在以上代码中,首先通过 page_obj
变量渲染当前页的数据。然后,通过 has_previous
和 has_next
属性判断是否需要展示上一页和下一页的链接。最后,通过 number
属性展示当前页的页码。