Django 自带了一个分页器 `Paginator`,位于 `django.core.paginator` 模块中。

 1. 在视图中使用 Paginator

在你的视图(views.py)中,你可以这样使用分页器:


from django.core.paginator import Paginator
from django.shortcuts import render
def my_view(request):
    object_list = MyModel.objects.all()  # 假设这是你要分页的对象列表
    paginator = Paginator(object_list, 10)  # 每页显示10个对象
    page_number = request.GET.get('page')  # 从GET参数中获取当前页码
    page_obj = paginator.get_page(page_number)  # 获取当前页的对象列表
    return render(request, 'my_template.html', {'page_obj': page_obj})




 2. 在模板中显示分页链接

在你的模板(my_template.html)中,你可以这样显示分页链接:


<div class="pagination">
    <span class="step-links">
        {% if page_obj.has_previous %}
            <a href="?page=1">&laquo; 第一页</a>
            <a href="?page={{ page_obj.previous_page_number }}">上一页</a>
        {% endif %}
        
        <span class="current">
            页码 {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
        </span>
        
        {% if page_obj.has_next %}
            <a href="?page={{ page_obj.next_page_number }}">下一页</a>
            <a href="?page={{ page_obj.paginator.num_pages }}">最后一页 &raquo;</a>
        {% endif %}
    </span>
</div>

<ul>
    {% for item in page_obj %}
        <li>{{ item }}</li>
    {% endfor %}
</ul>




3. 样式和自定义

你可以根据需要自定义分页链接的样式和布局。上面的模板只是一个基本的例子。

4. 考虑使用 Django 分页库

除了 Django 自带的分页器,还有一些第三方库提供了更丰富的功能,比如 `django-pagination` 或 `django-bootstrap-pagination`,它们可以更方便地集成到你的项目中,并提供更多的定制选项。

      注意事项

- 确保你的 URL 配置可以处理分页参数。
- 考虑到 SEO,你可能需要为分页页面设置合适的 `meta` 标签。
- 对于大型数据集,考虑使用数据库查询优化技术,如 `select_related` 或 `prefetch_related`,以减少数据库查询次数。

这就是在 Django 中实现分页的基本步骤。