📅  最后修改于: 2023-12-03 15:24:09.683000             🧑  作者: Mango
分页是一种常见的需求,它可以将大量数据分割成多个页面,方便用户查看。在 Django 项目中添加分页也是非常简单的,下面就为大家介绍一下。
Django 内置了分页组件,我们可以直接使用。如果你使用的是 Django 1.8 或更早版本,需要安装 django-pagination
插件。
pip install django-pagination
在视图函数中使用分页组件非常简单,我们只需要引入分页组件即可。假设我们有一个 Entry
模型,它包含了很多条记录,我们希望将这些记录分页展示。这时候,我们可以这么写:
from django.core.paginator import Paginator
def entry_list(request):
entry_list = Entry.objects.all()
paginator = Paginator(entry_list, 10) # 每页展示10条数据
page = request.GET.get('page')
entries = paginator.get_page(page)
return render(request, 'entry_list.html', {'entries': entries})
其中,entry_list
是查询出来的所有记录,Paginator
的第一个参数是数据集合,第二个参数是每页展示的数量。request.GET.get('page')
表示获取 GET 请求中的页码参数,最后通过 paginator.get_page()
方法获取对应页码的数据集合,返回给模板展示。
我们已经在视图函数中获取了分页之后的数据,下面就需要在模板中进行展示。展示分页的数据通常有两个步骤:
这里以 Bootstrap 4 为例子,演示如何实现分页展示:
{% if entries %}
<ul>
{% for entry in entries %}
<li>{{ entry.name }}</li>
{% endfor %}
</ul>
{% endif %}
{% if entries.has_other_pages %}
<nav aria-label="Page navigation example">
<ul class="pagination">
{% if entries.has_previous %}
<li class="page-item">
<a class="page-link" href="?page=1" aria-label="Previous">
<span aria-hidden="true">«</span>
<span class="sr-only">Previous</span>
</a>
</li>
<li class="page-item"><a class="page-link"
href="?page={{ entries.previous_page_number }}">{{ entries.previous_page_number }}</a></li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
<span class="sr-only">Previous</span>
</a>
</li>
{% endif %}
{% for i in entries.paginator.page_range %}
{% if entries.number == i %}
<li class="page-item active"><a class="page-link" href="#">{{ i }}</a></li>
{% else %}
<li class="page-item"><a class="page-link" href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if entries.has_next %}
<li class="page-item"><a class="page-link"
href="?page={{ entries.next_page_number }}">{{ entries.next_page_number }}</a></li>
<li class="page-item">
<a class="page-link" href="?page={{ entries.paginator.num_pages }}" aria-label="Next">
<span aria-hidden="true">»</span>
<span class="sr-only">Next</span>
</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">»</span>
<span class="sr-only">Next</span>
</a>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
这里的模板中,首先判断是否有当前页展示的数据,如果有,则进行展示。然后展示页码链接,根据 entries
对象的属性,我们可以很方便地获取上一页和下一页的页码,以及总页数。最后,根据 Bootstrap 4 的分页组件样式,通过模板语法渲染出具有分页效果的页面。
到这里,我们就完成了在 Django 项目中添加分页的操作。通过这篇文章的学习,相信大家对 Django 分页组件的使用也已经有了一定的了解。如果您还有其他问题,可以查阅 Django 官方文档,或者在社区寻求帮助。