Django 提供了强大的分页功能,可以轻松地在视图中实现分页。
在视图中使用分页:
# views.py
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render
from .models import YourModeldef your_view(request):# 从数据库中获取所有数据all_data = YourModel.objects.all()# 设置每页显示的数据数量items_per_page = 10# 创建分页对象paginator = Paginator(all_data, items_per_page)# 获取当前请求的页码page = request.GET.get('page')try:# 获取指定页码的数据data = paginator.page(page)except PageNotAnInteger:# 如果页码不是整数,返回第一页的数据data = paginator.page(1)except EmptyPage:# 如果页码超出范围,返回最后一页的数据data = paginator.page(paginator.num_pages)# 渲染视图并传递分页数据return render(request, 'your_template.html', {'data': data})
在模板中显示分页:
<!-- your_template.html -->
{% for item in data %}{# 显示数据 #}{{ item.field_name }}
{% endfor %}{# 显示分页导航 #}
<div class="pagination"><span class="step-links">{% if data.has_previous %}<a href="?page=1">« first</a><a href="?page={{ data.previous_page_number }}">previous</a>{% endif %}<span class="current">Page {{ data.number }} of {{ data.paginator.num_pages }}.</span>{% if data.has_next %}<a href="?page={{ data.next_page_number }}">next</a><a href="?page={{ data.paginator.num_pages }}">last »</a>{% endif %}</span>
</div>
这个模板中的分页导航演示了如何在模板中显示分页链接。它使用 data 对象中的信息,如 has_previous、previous_page_number、number、num_pages 等来生成分页导航链接。