推荐答案
在 Django 中,分页功能可以通过 django.core.paginator 模块中的 Paginator 类来实现。以下是一个简单的示例:
// www.javascriptcn.com code example
from django.core.paginator import Paginator
from django.shortcuts import render
from myapp.models import MyModel
def my_view(request):
# 获取所有对象
object_list = MyModel.objects.all()
# 每页显示 10 个对象
paginator = Paginator(object_list, 10)
# 获取当前页码
page_number = request.GET.get('page')
# 获取当前页的对象
page_obj = paginator.get_page(page_number)
return render(request, 'my_template.html', {'page_obj': page_obj})在模板中,可以使用 page_obj 来显示分页内容:
// www.javascriptcn.com code example
{% for obj in page_obj %}
{{ obj }}
{% endfor %}
<div class="pagination">
<span class="step-links">
{% 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 }} of {{ page_obj.paginator.num_pages }}.
</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 %}
</span>
</div>本题详细解读
Paginator 类
Paginator 类是 Django 分页功能的核心。它接受一个对象列表和一个每页显示的对象数量作为参数。Paginator 类的主要方法包括:
get_page(page_number):返回指定页码的Page对象。如果页码无效,则返回第一页或最后一页。page_range:返回一个包含所有页码的迭代器。count:返回对象的总数。num_pages:返回总页数。
Page 类
Page 类表示分页后的某一页。它包含以下常用属性和方法:
object_list:当前页的对象列表。number:当前页码。has_next():判断是否有下一页。has_previous():判断是否有上一页。next_page_number():返回下一页的页码。previous_page_number():返回上一页的页码。
模板中的分页导航
在模板中,可以通过 page_obj 对象来生成分页导航。常见的分页导航包括:
- 上一页和下一页链接。
- 第一页和最后一页链接。
- 当前页码和总页数显示。
通过结合 Paginator 和 Page 类,可以轻松地在 Django 中实现分页功能,并在模板中展示分页导航。