Django中分页器的使用

django分页器模块

#分页器
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger

分页器常用方法:

def index(request):
book_list=Book.objects.all()
#实例化分页器对象,第二个对象是每页最大条数
paginator=Paginator(book_list,21)
#三个静态方法
print('count',paginator.count) #数据总数
print('num_pages',paginator.num_pages) #总页数
print('page_range',paginator.page_range) #页码范围,相当于(1,总页数+1)
#取某一页的page对象
page1=paginator.page(1) #第一页的page对象
#遍历第一页的数据对象的两种方式
for i in page1:
print(i)
print(page1.object_list) page2=paginator.page(2)
print(page2.has_next()) #是否有下一页
print(page2.next_page_number()) #下一页的页码
print(page2.has_previous()) #是否有上一页
print(page2.previous_page_number()) #上一页页码 return render(request,'index.html',locals())

正式建一个分页器:

views:

from django.shortcuts import render,redirect
from .models import *
#分页器
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
# Create your views here. def add(request):
#数据库批量添加
book_list=[]
for i in range(500):
book_obj=Book(title='book%s'%i,price=i)
book_list.append(book_obj)
Book.objects.bulk_create(book_list)
return redirect('/index/') def index(request): current_page_num=int(request.GET.get('page',1))
book_list = Book.objects.all()
paginator=Paginator(book_list,11)
page=paginator.page(current_page_num)

html(利用bootstrap框架):

<body>
<ul>
{% for book in page %}
<li>{{ book.pk }}--{{ book.title }}--{{ book.price }}</li>
{% endfor %}
</ul>
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
<a href="?page={{ current_page_num|add:-1 }}" aria-label="Previous">上一页</a>
</li>
{% for num in paginator.page_range %}
{% if current_page_num == num %}
<li class="active">
<a href="?page={{ num }}">{{ num }}</a>
</li>
{% else %}
<li>
<a href="?page={{ num }}">{{ num }}</a>
</li>
{% endif %}
{% endfor %}
{# 下一页#}
{% if page.has_next %}
<li>
<a href="?page={{ current_page_num|add:1 }}" aria-label="Next">下一页</a>
</li>
{% else %}
<li class="disabled">
<a href="#" aria-label="Next">下一页</a>
</li>
{% endif %} </ul>
</nav> </body>

页数比较多时,不一一显示:

可以加一段逻辑

def index(request):
current_page_num=int(request.GET.get('page',1))
book_list = Book.objects.all()
paginator=Paginator(book_list,11)
num_pages=paginator.num_pages
#总页数过多时,不一一显示
if num_pages>11:
if current_page_num<6:
page_range=range(1,12)
elif current_page_num>num_pages-5:
page_range=range(num_pages-10,num_pages+1)
else:
page_range=range(current_page_num-5,current_page_num+6)
else:
page_range=paginator.page_range
page=paginator.page(current_page_num)

最新文章

  1. Reactive Extensions介绍
  2. Python爬虫代理池
  3. MongoDB安装与启动
  4. Redis集群的部署
  5. Offer_answer_with_SDP_rfc3264
  6. gym101090 I Painting the natural numbers
  7. 【hdu3341-Lost&#39;s revenge】DP压缩+AC自动机
  8. Android 注解的一些应用以及原理
  9. 【ps】gif动态图白边问题
  10. bootstrap 按钮 文本 浮动 隐藏
  11. 获取子物体数量---Transform.childCount
  12. 认识JWT
  13. eslint常用关闭校验语句
  14. 树莓派3 之 USB摄像头安装和使用
  15. springmvc shiro整合cas单点登入
  16. PHP开启mysqli扩展
  17. linux grep 正则表达式
  18. MapReduce原理2
  19. java在注解中绑定方法参数的解决方案
  20. Web 跨域请求

热门文章

  1. C#网络编程TCP通信实例程序简单设计
  2. [Error: Failed to find &#39;ANDROID_HOME&#39; environment variable. Try setting setting it manually
  3. Linux操作系统定时任务系统 Cron 入门
  4. 分布式搜索elasticsearch几个概念解析
  5. Unity3D 记第二次面试
  6. How are you vs How are you doing
  7. 分享10款效果惊艳的HTML5图片特效【转】
  8. 基于pandas python的美团某商家的评论销售(数据分析)
  9. windows下Anaconda3配置TensorFlow深度学习库
  10. 实现 TensorFlow 架构的规模性和灵活性