推荐答案
在 Django 中,Paginator 和 Page 类用于实现分页功能。以下是如何使用它们的示例代码:
// www.javascriptcn.com code example
from django.core.paginator import Paginator, Page
from django.shortcuts import render
from myapp.models import MyModel
def my_view(request):
# 获取所有对象
object_list = MyModel.objects.all()
# 创建 Paginator 对象,每页显示 10 个对象
paginator = Paginator(object_list, 10)
# 获取请求中的页码参数,默认为第一页
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 来显示分页内容和导航:
// www.javascriptcn.com code example
<!-- 显示当前页的对象 -->
<ul>
{% for obj in page_obj %}
<li>{{ obj.name }}</li>
{% endfor %}
</ul>
<!-- 分页导航 -->
<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 提供的一个分页工具,用于将一组对象分成多个页面。它的主要参数包括:
object_list: 需要分页的对象列表,通常是一个 QuerySet。per_page: 每页显示的对象数量。
Paginator 类提供了以下常用属性和方法:
count: 对象的总数。num_pages: 总页数。page_range: 页数的范围,从 1 开始。get_page(number): 获取指定页码的Page对象。如果页码无效,返回第一页或最后一页。
Page 类
Page 类表示 Paginator 中的一页。它提供了以下常用属性和方法:
object_list: 当前页的对象列表。number: 当前页码。paginator: 关联的Paginator对象。has_next(): 是否有下一页。has_previous(): 是否有上一页。next_page_number(): 下一页的页码。previous_page_number(): 上一页的页码。
分页导航
在模板中,你可以使用 page_obj 的属性和方法来生成分页导航。常见的导航元素包括:
- 上一页和下一页的链接。
- 第一页和最后一页的链接。
- 当前页码和总页数的显示。
通过结合 Paginator 和 Page 类,你可以轻松地在 Django 中实现分页功能,并在模板中展示分页导航。