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">« 第一页</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 }}">最后一页 »</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 中实现分页的基本步骤。