在Django中,我们可以使用内置的分页器(Paginator)来实现分页功能。以下是一个简单的示例,展示了如何在Django视图中使用Paginator来分页查询集:
from django.core.paginator import Paginator
from django.shortcuts import render
from .models import MyModel
def my_view(request):
# 获取对象列表
object_list = MyModel.objects.all()
# 创建Paginator对象,每页显示10个对象
paginator = Paginator(object_list, 10)
# 从GET请求中获取页码
page_number = request.GET.get('page')
# 获取具体页码的Page对象
page_obj = paginator.get_page(page_number)
# 渲染页面
return render(request, 'my_template.html', {'page_obj': page_obj})
在模板中,我们可以使用page_obj
来显示分页信息和对象列表:
<ul>
{% for object in page_obj %}
<li>{{ object }}</li>
{% endfor %}
</ul>
<!-- 分页导航 -->
<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 }} 页 / 共 {{ 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>
这个例子展示了如何在Django视图中创建Paginator对象,并在模板中显示对象列表和分页导航。