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.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑 ...
随机推荐
- Mysql锁(翻译)
内容主要是对mysql文档的翻译. 1. shared(s) 共享锁2. exclusive(x) 排它锁 innodb的s锁和x锁是行级锁.事务T1获得s锁,事务T2仍然可以获得s锁.事务T1获得x ...
- Weblogic项目部署教程
说明: 其实Weblogic是允许直接以文件夹形式发布项目的,WAR包和文件夹发部的效果没有什么区别. 对于Eclipse项目,导出的WAR包其实确实只是项目下的WebContent文件夹中的内容,所 ...
- linux定时删除文件脚本
#! /bin/sh # 配置项DEBUG=truefolderDir=/var/www/html/hlsrecord/EXPIRE_DAY=1 # 过期时间和时间戳deadTime=`date -d ...
- POJ 2243 Knight Moves(BFS)
POJ 2243 Knight Moves A friend of you is doing research on the Traveling Knight Problem (TKP) where ...
- CAD(布置厨洁具)(尺寸标注)5.12
"TYTK"打开图库,找到平面厨具和洁具.双击选中的厨具,A可以不停旋转90度.给厨具选取正确的位置.画出灶台线,同理画出卫生间的家具.绘制出洗脸台的平台.浴缸的平台. 尺寸标注: ...
- 你应该这样理解JVM内存管理
在进行Java程序设计时,一般不涉及内存的分配和内存回收的相关代码,此处引用一句话: Java和C++之间存在一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外的人想进去,墙里面的人想出来 ,个人从这 ...
- body中的onload()函数和jQuery中的document.ready()有什么区别?
1.我们可以在页面中使用多个document.ready(),但只能使用一次onload(). 2.document.ready()函数在页面DOM元素加载完以后就会被调用,而onload()函数则要 ...
- python介绍与入门
一.python 的介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ...
- unity实现用鼠标右键控制摄像机视角上下左右移动
using System;using System.Collections.Generic;using UnityEngine;public class ViewControl{ enum Rotat ...
- HTML(四)Form标签
<form>…</form> 定义供用户输入的 HTML 表单 例子 <html> <body> <form method="ge ...