一、分页器介绍
python3 manage.py shell #进入shell模式下 from django.core.paginator import Paginator #导入包 from loginApp.models import Guest #导入对象 guest_list = Guest.objects.all() #获取到所有的guest对象 p=Paginator(guest_list,2) #创建每页 2 条数据的分页器 p.count # 查看共多少条数据 p.page_range #查看共分多少页(每页 2 条数据)循环结果为 1,2,3(共 3 页) page1 = p.page(1) # 获取第 1 页的数据 page1.object_list # 当前页的对象 page1 = p.page(1) for p in page1: # 循环打印第 1 页嘉宾的 realname p ##########第三页############# >>> page3 = p.page(3) # 获取第 3 页的数据 >>> page3.has_next() # 是否有下一页 False >>> page3.has_previous() # 是否有上一页 True >>> page3.has_other_pages() # 是否有其它页 True >>> page3.previous_page_number() # 前一页是第几页 >>> page2.next_page_number() # 下一页是第几页 >>> page2.previous_page_number() # 上一页是第几页 page2.has_next() # 是否有下一页 page2.has_previous() # 是否有上一页 page2.end_index() # 本页的最后一条数据 page2.start_index() # 本页的第一条数据
二、分页器代码实现
1、修改views.py
@login_required() def guest_manage(request): username = request.session.get('user', '') guest_list = Guest.objects.all() paginator = Paginator(guest_list,2) #创建每页2条的分页器 page = request.GET.get("page") #从页面获取page数据 ''' 获取第 page 页的数据。如果当前没有页数,抛 PageNotAnInteger 异常,返回第一页的数据。如果超出最 大页数的范围,抛 EmptyPage 异常,返回最后一页面的数据。 ''' try: contents = paginator.page(page) except PageNotAnInteger: contents = paginator.page(1) except EmptyPage: contents = paginator.page(paginator.num_pages) return render(request,'guest_manage.html',{'user':username,'guests':contents})
2、修改guest_manage.html
<!-- 嘉宾列表 --> ........................... <!-- 列表分页器 --> <div class="pagination"> <span class="step-links"> {% if guests.has_previous %} <a href="?page={{ guests.previous_page_number }}"> previous </a> {% endif %} <span class="current"> Page {{ guests.number }} of {{ guests.paginator.num_pages }}. </span> {% if guests.has_next %} <a href="?page={{ guests.next_page_number }}"> next </a> {% endif %} </span> </div> </body>
3、重新访问http://127.0.0.1:8000/event_manage,点击嘉宾按钮可以看到:
本章代码:https://github.com/Oneperson1128/DjangoDemo.git 参考loginDemo6文件夹