📌  相关文章
📜  基于 django 分页类的视图 - Python (1)

📅  最后修改于: 2023-12-03 14:51:35.737000             🧑  作者: Mango

基于 Django 分页类的视图 - Python

在 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 分页类进行分页展示。

渲染分页结果

最后,我们需要在模板中渲染分页结果。以下代码展示了如何在模板中使用 paginatorpage_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_previoushas_next 属性判断是否需要展示上一页和下一页的链接。最后,通过 number 属性展示当前页的页码。