分页器

简单的分页器实现

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">&laquo;</span></a></li>
{% else %}
<li class="disabled"><a href="" aria-label="Previous"><span aria-hidden="true">&laquo;</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">&raquo;</span></a></li>
{% else %}
<li class="disabled"><a href="" aria-label="Next"><span aria-hidden="true">&raquo;</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组件之分页器的更多相关文章

  1. WEB框架-Django组件学习-分页器学习

    1.分页器基础学习 1.1 补充知识-批量创建 数据库中数据批量创建,不要每创建一个就往数据库中塞一个,会造成撞库,造成大量I/O操作,速速较慢,应该采用一次性创建大量数据,一次性将大量数据塞入到数据 ...

  2. Django组件 之 分页器(paginator)

    --------------------------------------------------------------------------------路虽远,行则将至.  事虽难,做则必成. ...

  3. Django组件总结

    Django组件介绍 分页器的使用 分页器在页面中非常常见,当数据库条数数据过多时,页面一次性显示不好看时,我们可以使用分页器,将数据分几次显示. 1.1 数据库内插入大量数据 Booklist=[] ...

  4. Django组件——分页器和中间件

    分页器 Django内置分页器(paginator) 分页器函数为paginator,里面有几个重要的参数需要我们了解 paginator = Paginator(book_list, 10) #第二 ...

  5. Django - 文件上传、Django组件 - 分页器(paginator)

    一.文件上传准备知识 - Content-Type 1.请求头 - Content-Type Content-Type指的是请求体的编码类型,常见的类型共有3种: 1)application/x-ww ...

  6. Django 组件之 ----- content-type

    Django 组件之 content-type的使用 一个表和多个表进行关联,但具体随着业务的加深,表不断的增加,关联的数量不断的增加,怎么通过一开始通过表的设计后,不在后期在修改表,彻底的解决这个问 ...

  7. python 全栈开发,Day78(Django组件-forms组件)

    一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...

  8. python 全栈开发,Day76(Django组件-cookie,session)

    昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...

  9. Django组件补充(缓存,信号,序列化)

    Django组件补充(缓存,信号,序列化) Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑 ...

随机推荐

  1. Windows与Linux端口占用查询及处理

    Windows下端口占用查询 输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是49157,首先找到它. 查看被占用端口对应的PID,输入命令:netstat ...

  2. [转载]Python正则表达式匹配反斜杠'\'问题

    转载自csdnblog:Python正则表达式匹配反斜杠'\'问题 在学习Python正则式的过程中,有一个问题一直困扰我,如何去匹配一个反斜杠(即“\”)? 一.引入 在学习了Python特殊字符和 ...

  3. kali-rolling安装nessus 7并创建扫描任务教程

    一.下载 下载页面:https://www.tenable.com/downloads/nessus 如果自己安装的kali是32位的则选择上边的32位版本下载 二.安装 直接用dpkg安装即可: d ...

  4. char和varchar、浮点数和定点数

    cmd连接mysql数据库:找到mysql目录,进入到bin目录,然后在命令行中输入 mysql -hlocalhost -uroot -ppass ,连接mysql数据库成功. 1.char和var ...

  5. ubuntu中更新.netcore到2.1版本

    如果需要安装新版本到dotnetcore,需要先卸载旧版本(https://github.com/dotnet/core/blob/master/release-notes/download-arch ...

  6. UVa LA 3695 - Distant Galaxy 前缀和,状态拆分,动态规划 难度: 2

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  7. 4.1 C++多态的概念及前提条件

    参考:http://www.weixueyuan.net/view/6370.html 总结: 而多态的功能则是将函数名动态绑定到函数入口地址,这样的动态绑定过程称为运行期绑定. 而在运行期绑定的函数 ...

  8. JSP组件Telerik UI for JSP发布R1 2019 SP1|附下载

    Telerik UI for JSP拥有由Kendo UI for jQuery支持的40+ JSP组件,同时通过Kendo UI for jQuery的支持能使用JSP封装包构建现代的HTML5和J ...

  9. MyEclipse教程:使用UML创建模块库——第二部分(一)

    MyEclipse 在线订购年终抄底促销!火爆开抢>> [MyEclipse最新版下载] UML2建模文件存储在建模存储库中,建模可用于生成Java代码,或者可以从代码生成模型. 本教程介 ...

  10. android 广播 接收短信

    ; i < messages.length; i++) { SmsMessage ms = SmsMessage.createFromPdu((byte[])pdus[i]); String f ...