分页器

简单的分页器实现

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. php 循环数组问题

    $a = array('abe','ben','cam'); //foreach遍历数组时,实际上是遍历的数组的一个拷贝,并且在开始遍历之前会把指针指向拷贝的开始:,根据cow机制,写时,重新复制一份 ...

  2. redisObject

    typedef struct redisObject {    unsigned type:4;    unsigned encoding:4;    unsigned lru:REDIS_LRU_B ...

  3. Qt Widgets——子区域和子窗口

    QMdiArea 一般使用于主窗口QMainWindow,用于容纳多个子窗口QMdiSubWindow qt creator 3.0的设计师有MdiArea可直接拖入使用. 界面如下,图中灰色框即是个 ...

  4. Spring控制反转(依赖注入)的最简单说明

    1.常规方式实现实例化 1.1已有角色如下: 一个接口Interface,两个接口实现类InstatnceA.InstanceB,一个调用类User 1.2当前实例化InstanceA如下: Inte ...

  5. Node.js概要

    Node.js是一个Javascript运行环境(runtime). Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好. Node.js是一个基于Chro ...

  6. ci框架memcached使用

    首先第一步需要安装memcached扩展 安装方法这里就不叙述了 application/config/memcached.php配置 $config = array( 'default' => ...

  7. Win10系列:JavaScript 模板绑定

    WinJS库模板提供了一种格式化显示多条数据的便捷方式,通过这种方式可以将模板与ListView或FlipView等控件结合使用以控制数据的显示格式.定义一个WinJS库模板的方法与定义WinJS库控 ...

  8. HTML编辑笔记3

    表单 1.语法 <form method="get|post" action="数据向哪提交的地址"> //表单内容 </form> 2 ...

  9. nginx:负载均衡(三)分流策略

    [1]轮询策略.轮询策略是最简单的策略,无脑配置,不考虑服务器的访问的能力.每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除 upstream www.daysn. ...

  10. 前端小菜鸡使用Vue+Element笔记(二)

    记录一下在使用Vue和Element做项目时遇到过的难点... 1.在 <el-table>表格中嵌入 select下拉选择框,以及 tooltip提示框的使用 主要定义格式如红色标记代码 ...