Django组件之分页器
分页器
简单的分页器实现
views.py
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
from app1.models import *
def index(request):
# book_list = []
#
# # 数据库批量写入数据,比每次打开数据库写入数据效率更高
# for i in range(100):
# book = Book(title='book_%s'%i,price=i+i)
# book_list.append(book)
# Book.objects.bulk_create(book_list)
book_list = Book.objects.all()
paginatior = Paginator(book_list,10)
# book_list中的数量
print(paginatior.count)
# 总页数
print(paginatior.num_pages)
# 页码的列表
print(paginatior.page_range)
# 假设get请求的数据大于或者小于了页码,会报错(EmptyPage错误),在这里捕获这个错误,然后把页码设置为首页
try:
page = paginatior.page(1)# 第一页的page对象
for i in page:# 第一页的所有数据
print(i)
# 根据get请求中的参数进行分页
current_page_num = int(request.GET.get('page',1))
current_page = paginatior.page(current_page_num)
print(current_page.has_next()) # 是否有下一页
print(current_page.next_page_number()) # 下一页的页码
print(current_page.has_previous()) # 是否有上一页
print(current_page.previous_page_number()) # 上一页的页码
except EmptyPage as e:
current_page = paginatior.page(1)
return render(request,'index.html',locals())
分页器实现页码,并且点击页码可以进行跳转
index.html
<body>
<ul>
{% for book in current_page %}
<li>{{ book.title }}:{{ book.price }}</li>
{% endfor %}
</ul>
<nav aria-label="Page navigation">
<ul class="pagination">
{% if current_page.has_previous %}
<li><a href="?page={{ current_page.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">«</span></a></li>
{% else %}
<li class="disabled"><a href="" aria-label="Previous"><span aria-hidden="true">«</span></a></li>
{% endif %}
{% for itme in paginatior.page_range %}
{% if current_page_num == itme %}
<li class="active"><a href="?page={{ itme }}">{{ itme }}</a></li>
{% else %}
<li><a href="?page={{ itme }}">{{ itme }}</a></li>
{% endif %}
{% endfor %}
{% if current_page.has_next %}
<li><a href="?page={{ current_page.next_page_number }}" aria-label="Next"><span aria-hidden="true">»</span></a></li>
{% else %}
<li class="disabled"><a href="" aria-label="Next"><span aria-hidden="true">»</span></a></li>
{% endif %}
</ul>
</nav>
</body>
优化后的分页器
def index(request):
# book_list = []
#
# # 数据库批量写入数据,比每次打开数据库写入数据效率更高
# for i in range(100):
# book = Book(title='book_%s'%i,price=i+i)
# book_list.append(book)
# Book.objects.bulk_create(book_list)
book_list = Book.objects.all()
paginatior = Paginator(book_list,3)
# book_list中的数量
print(paginatior.count)
# 总页数
print(paginatior.num_pages)
# 页码的列表
print(paginatior.page_range)
# 分页器优化
current_page_num = int(request.GET.get('page', 1))
if paginatior.num_pages > 11:
if current_page_num -5<1:
page_range = range(1,11)
elif current_page_num +5 > paginatior.num_pages:
page_range = range(paginatior.num_pages-10,paginatior.num_pages+1)
else:
page_range = range(current_page_num-5,current_page_num+5)
else:
page_range = paginatior.page_range
print('page',page_range)
# 假设get请求的数据大于或者小于了页码,会报错(EmptyPage错误),在这里捕获这个错误,然后把页码设置为首页
try:
page = paginatior.page(1)# 第一页的page对象
for i in page:# 第一页的所有数据
print(i)
# 根据get请求中的参数进行分页
current_page_num = int(request.GET.get('page',1))
current_page = paginatior.page(current_page_num)
print(current_page.has_next()) # 是否有下一页
print(current_page.next_page_number()) # 下一页的页码
print(current_page.has_previous()) # 是否有上一页
print(current_page.previous_page_number()) # 上一页的页码
except EmptyPage as e:
current_page = paginatior.page(1)
return render(request,'index.html',locals())
Django组件之分页器的更多相关文章
- WEB框架-Django组件学习-分页器学习
1.分页器基础学习 1.1 补充知识-批量创建 数据库中数据批量创建,不要每创建一个就往数据库中塞一个,会造成撞库,造成大量I/O操作,速速较慢,应该采用一次性创建大量数据,一次性将大量数据塞入到数据 ...
- Django组件 之 分页器(paginator)
--------------------------------------------------------------------------------路虽远,行则将至. 事虽难,做则必成. ...
- Django组件总结
Django组件介绍 分页器的使用 分页器在页面中非常常见,当数据库条数数据过多时,页面一次性显示不好看时,我们可以使用分页器,将数据分几次显示. 1.1 数据库内插入大量数据 Booklist=[] ...
- Django组件——分页器和中间件
分页器 Django内置分页器(paginator) 分页器函数为paginator,里面有几个重要的参数需要我们了解 paginator = Paginator(book_list, 10) #第二 ...
- Django - 文件上传、Django组件 - 分页器(paginator)
一.文件上传准备知识 - Content-Type 1.请求头 - Content-Type Content-Type指的是请求体的编码类型,常见的类型共有3种: 1)application/x-ww ...
- Django 组件之 ----- content-type
Django 组件之 content-type的使用 一个表和多个表进行关联,但具体随着业务的加深,表不断的增加,关联的数量不断的增加,怎么通过一开始通过表的设计后,不在后期在修改表,彻底的解决这个问 ...
- python 全栈开发,Day78(Django组件-forms组件)
一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...
- python 全栈开发,Day76(Django组件-cookie,session)
昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...
- Django组件补充(缓存,信号,序列化)
Django组件补充(缓存,信号,序列化) Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑 ...
随机推荐
- jquery attr方法获取input的checked属性问题
1.通过prop方法获取checked属性,获取的checked返回值为boolean,选中为true,否则为flase <input type="checkbox" id= ...
- textarea输入框限制字数
<textarea onkeyup="checkLen(this)"></textarea> <div>您还可以输入 <span id=& ...
- Elasticsearch安装部署(CentOS)
1.安装JDK,http://www.cnblogs.com/zhi-leaf/p/5996287.html. 2.下载ES:https://www.elastic.co/downloads/elas ...
- linux系统监控与硬盘分区/格式化/文件系统管理
1.系统监控 1) 系统监视和进程控制的工具----> Top 与 free 类似于windows的资源管理器. 进程运行的三种状态: tips: 进程(Process)是计 ...
- Mybatis之trim标签的理解
最近在学Mybatis,在学到动态sql的trim标签时,很迷惑.不知所以然.看别人的博客和论坛里的解释,太宽泛,还是不能理解: trim元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其 ...
- ssh三大框架整合
spring+struts2+hibernate 参考1:数据库为oracle http://takeme.iteye.com/blog/1678268 参考2:数据库为mysql http://bl ...
- sass嵌套风格
1.嵌套输出方式 nested Sass 提供了一种嵌套显示 CSS 文件的方式.例如 nav { ul { margin:; padding:; list-style: none; } li { d ...
- 深入理解java虚拟机---虚拟机工具jconsole(十八)
Jconsole,Java Monitoring and Management Console. Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到.它用于连接正在运行的本地或者远 ...
- bootstrap动态生成层级ul-li 新闻预览 常用方法
<div class="row" id="add-withinfosortId-row" style="display: none"& ...
- tf 模型保存
tf用 tf.train.Saver类来实现神经网络模型的保存和读取.无论保存还是读取,都首先要创建saver对象. 用saver对象的save方法保存模型 保存的是所有变量 save( sess, ...