Django 使用 Paginator 进行分页 Demo

Django 使用 Paginator 进行分页

# 导入 Paginator类
from django.core.paginator import Paginator
# 构建一个测试列表
test_list = [i for i in range(0,10)]
# 创建一个分页器,每页 4 条数据
p = Paginator(test_list, 4)
# 查看共有多少条数据
p.count				# 10
# 查看共有多少页,总共 1~3, 3 页,range 不包含最后一个
p.page_range		# range(1, 4)

# ------------- 第一页
# 获取第一页数据
page1 = p.page(1)
# 打印当前属于第几页
print(page1)		# <Page 1 of 4>
# 查看当前页的对象,以列表形式返回
page1.object_list	# [0, 1, 2]
# 使用 for 打印当前页的内容
for i in page1:
    print(i)
    
# ------------- 第二页
page2 = p.page(2)
# 查看是否有上一页
page2.has_previous()			# True
# 上一页是第几页
page2.previous_page_number()	# 1
# 查看是否有下一页
page2.has_next()				# True
# 下一页是第几页
page2.next_page_number()		# 3
# 当前页开始的数据
page2.start_index()				# 5
# 当前页结束的数据
page2.end_index()				# 8

# ------------- 第三页
page3 = p.page(3)
# 查看是否有下一页
page3.has_next()				# False
# 查看是否有上一页
page3.has_previous()			# True
# 上一页是第几页
page3.previous_page_number()	# 2
# 是否有其他页
page3.has_other_pages()			# True

写一个分页的后端逻辑,前提:当前已有一个数据库,数据库中有 5 条客户数据,现要求每页显示 2 条。

def guest_manage_with_pages(request):
    # 获取所有数据
    guest_list = Guest.objects.all()
    # 创建一个分页器,每页显示 2 条数据
    paginator = Paginator(guest_list, 2)
    # 接收前端传来的 page,后端进行翻页
    page = request.GET.get('page')
    # 获取指定页数据
    try:
        contacts = paginator.page(page)
    # 参数错误返回第一页数据
    except PageNotAnInteger:
        contacts = paginator.page(1)
    # 超过最大页数返回最后一页
    except EmptyPage:
        contacts = paginator.page(paginator.num_pages)
    # 传递给前端
    return render(request, 'guest_manage.html', {'user':username,'guests':contacts})

前端显示逻辑

    <div class="pagination">
        <span class="step-links">
            <!-- 如果有上一页,显示上一页的 a 链接 -->
            {% if guests.has_previous %}
            <a href="?page={{ guests.previous_page_number }}">上一页</a>
            {% endif %}
            <!-- 打印当前属于第几页 -->
            <span class="current">
                <!-- Page {{ guests.number }} of {{ guests.paginator.num_pages }} -->
                {{ guests }}
            </span>
            <!-- 如果有下一页,显示下一页的 a 链接 -->
            {% if guests.has_next %}
            <a href="?page={{ guests.next_page_number }}">下一页</a>
            {% endif %}
        </span>
    </div>

最终效果:

第一页:

image-20210531003552043

第二页:

image-20210531003646675

第三页:

image-20210531003743704

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

某呆啊

赏个糖吃吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值