介绍三种实现分页功能的方式,前两种为简单的,后一种稍微复杂一些
第一种方式:
如图所示,能一次将所有页都能展示出来
视图函数:
from django.core.paginator import Paginator, PageNotAnInteger, InvalidPage, EmptyPage
def select(request):
# 1. 把需要分页的数据全部查询出来;
user_list = User.objects.all()
# 2. 利用user_list数据,创建一个分页器对象
# 参数1:要分页的数据;参数2:设置每页要展示的数据个数;参数3:如果最后一页不到5个数据,是否将最后一页的数据合并到上一页进行展示;默认是False,不合并;
paginator = Paginator(user_list, 5)
# 3. 创建页面对象Page,每一个page对应的是每一个页面,这个page中包含:
# page对象有三个属性:
# a> page.number: 表示当前查询的页码;
# b> page.object_list: 表示当前页要展示的数据;
# c> page.paginator: 它就是上面创建的Paginator(user_list, 5)这个对象,无论是哪一页,这个paginator对象始终跟着Page对象;
try:
page_number = request.GET.get('page', '1')
page = paginator.page(page_number)
except (PageNotAnInteger, EmptyPage, InvalidPage):
# 如果出现上述异常,默认展示第1页
page = paginator.page(1)
return render(request, 'index.html', {'page': page})
模板中:
<nav aria-label="Page navigation">
{% for data in page.object_list %}
<p>{
{ data.id }}-{
{ data.name }}-{
{ data.age }}</p>
{% endfor %}
<ul class="pagination">
{% if page.has_previous %}