(31)django中的分页器
book_list = models.Book.objects.all() #查出指定表中的所有数据
paginator = Paginator(book_list,2) #实例化对象,传入两个参数,一个就是获取到的所有数据,后面的数字就是每页显示的数据条数,意思就是要分页每页显示多少
paginator.count #数据的总条数
paginator.num_pages #分的总页数
page_range #是一个生成器,底层显示的是一个range(number,number)就是一个总页数的索引范围
'''如果这里指明的页数是1,page后面获取上一页的页码数就会报错,请try捕获即可'''
page = paginator.page(3) #page是一个对象,后面的参数就是要指明取的第几页的所有数据,每一页的数据就是一个对象
page.object_list() #第N页的所有数据
page.has_next() #是否有下一页有就是True
page.has_previous() #是否有上一页
page.previous_page_number() #上一页的页码数
page.next_page_number() #下一页页码数
实例
urls.py
from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^page_test/$', views.page_test)
]
views.py
from django.shortcuts import render,HttpResponse,redirect from django.core.paginator import Paginator #Paginator就是分页器是一个类
from app01 import models def page_test(request):
current_page = int(request.GET.get('page')) #这个就是取出前端传过来的页数,这里最好转成页数,这个就是当前页
book_list = models.Book.objects.all() #查出指定表中的所有数据
paginator = Paginator(book_list,1) #实例化对象,传入两个参数,一个就是获取到的所有数据,后面的数字就是每页显示的数据条数,意思就是要分页每页显示多少
'''这里用if判断做页码总页数大于10就只显示10页,构造出分页数字显示一直在中间,如果小于10页就有几页显示几页'''
if paginator.num_pages > 11: #如果总页数大于11
if current_page-5 < 1: #如果当前页-5 < 1
page_range = range(1,11) #则定义总页数的索引范围就是10页
elif current_page + 5 > paginator.num_pages: #如果当前页+5大于总页数
page_range = range(paginator.num_pages-10,paginator.num_pages+1) #总页数的索引范围是总页数-10,总页数+1,因为range的最后一个是不现实,所以要多一页才能显示最后一页
else:
page_range = range(current_page-5,current_page +6)
else:
page_range = paginator.page_range
page = paginator.page(current_page) #page是一个对象,后面的参数就是要指明取的第几页的所有数据,每一页的数据就是一个对象,这里放入的是动态的,前端获取的
return render(request,'page.html',locals())
page.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
<title>Title</title>
</head>
<body>
<div>
{#这里就是从后端获取数据#}
{% for book in page.object_list %}
<p>书名:{{ book.name }} </p>
<p>价格:{{ book.price }}</p>
<p>出版日期:{{ book.publish_date }}</p>
<p>-------------------------------------</p>
{% endfor %}
</div>
<nav aria-label="Page navigation">
<ul class="pagination">
{#这里判定如果有上一页的时候就显示,没有就# #}
{% if page.has_previous %}
<li>
<a href="/page_test/?page={{ page.previous_page_number }}" aria-label="Previous">
<span aria-hidden="true">上一页</span>
</a>
</li>
{% else %}
<li>
<a href="#" aria-label="Previous">
<span aria-hidden="true">上一页</span>
</a>
</li>
{% endif %} {# 这里循环page_range总页数的索引范围,获取总页数,然后根据每页显示几条自动生成页数,动态生成页数 #}
{% for foo in page_range %}
{#这里用if判断,如果选中的页数,则获取类名,变色,反则不变色 #}
{% if foo == current_page %}
{#a标签获取地址后面拼接页数,就可以点击#}
<li class="active"><a href="/page_test/?page={{ foo }}">{{ foo }}</a></li>
{% else %}
<li><a href="/page_test/?page={{ foo }}">{{ foo }}</a></li>
{% endif %} {% endfor %}
{#这里判定如果有下一页的时候就显示,没有就# #}
{% if page.has_next %}
<li>
<a href="/page_test/?page={{ page.next_page_number }}" aria-label="Next">
<span aria-hidden="true">下一页</span>
</a>
</li>
{% else %}
<li>
<a href="#" aria-label="Next">
<span aria-hidden="true">下一页</span>
</a>
</li>
{% endif %}
</ul>
</nav>
</body>
</html>
分页后端代码的逻辑

(31)django中的分页器的更多相关文章
- django中的分页器组件
目录 django的组件-分页器 引入分页器 分页器demo 创建数据库模型 url控制器 views视图函数 templates模板 为什么要用分页器 导入分页器 分页器优化1 分页器优化2 有多少 ...
- Django 中的 WSGI
Django 源码小剖: Django 中的 WSGI 2013-09-06 22:31 by 捣乱小子, 334 阅读, 0 评论, 收藏, 编辑 Django 其内部已经自带了一个方便本地测试的小 ...
- WEB框架-Django组件学习-分页器学习
1.分页器基础学习 1.1 补充知识-批量创建 数据库中数据批量创建,不要每创建一个就往数据库中塞一个,会造成撞库,造成大量I/O操作,速速较慢,应该采用一次性创建大量数据,一次性将大量数据塞入到数据 ...
- Django中的ORM相关操作:F查询,Q查询,事物,ORM执行原生SQL
一 F查询与Q查询: 1 . F查询: 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的 ...
- django中的路由控制详解
一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 一 Django中路由的作用 URL配置(URLconf) ...
- Django:Django中的ORM
一.Django项目使用MySQL数据库 1,在Django项目的settings.py,文件中,配置数据库连接信息: DATABASES = { "default": { &qu ...
- 转 Django中的Form
https://www.cnblogs.com/chenchao1990/p/5284237.html Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 ...
- django中的分页管理
有时,展示的对象太多,需要对他们进行分页展示,不能一页把所有的结果都展示出来吧,那样的话,哈哈,挺逗 使用Django分页器功能 从Django中导入Paginator模块(没有的话,自行下载,我是w ...
- django中的ORM与 应用与补充
目录 django中的ORM与 应用与补充 ORM与数据的对应关系 ORM 常用字段 ORM 其他字段 自定义字段 字段参数 Model Meta参数 常用13中查询(必会) 单表查询的双下划线应用 ...
随机推荐
- Learning-Python【18】:Python常用模块(1)—— time、datetime、randrom
time 模块:与时间相关的功能的模块 在 Python 中,时间分为三种: 1.时间戳:是一个时间的表示,根据不同的语言,可以是整数或浮点数,是从1970年1月1日0时0分0秒到现在经历的秒数 2. ...
- Qt自定义阴影效果和QOpenGLWidget冲突导致控件不刷新
Qt5.6.2版本存在这样一个问题(其它版本未测试),当main函数中设置了application.setAttribute(Qt::AA_NativeWindows)(用于使得每个子界面都可以获取w ...
- HDU 1043 Eight(八数码)
HDU 1043 Eight(八数码) 00 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Descr ...
- 智能合约 helloworld
windows 平台 所以直接使用Remix在线编译环境 新建hello.sol文件 编辑如下 Remix 右边侧栏 setting 选择合适的编译器版本 这里选择 0.4.19 文件中输入如下内容 ...
- Java实现将文件或者文件夹压缩成zip
最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类. 这个工具类的功能为: ( ...
- POJ-3294 Life Forms n个字符串中出现超过n/2次的最长子串(按字典序依次输出)
按照以前两个字符串找两者的最长公共子串的思路类似,可以把所有串拼接到一起,这里为了避免讨论LCP跨越多个串需需要特别处理的问题用不同的字符把所有串隔开(因为char只有128位,和可能不够用,更推荐设 ...
- 本地项目初始化git推送到服务器
1. 创建本地项目,在项目根目录执行git init命令 git init 2.在git服务器上创建一个仓库,这里使用GitHub创建一个仓库. 3.执行git remote add origin & ...
- 『TensorFlow』流程控制之tf.identity
一个详细介绍 下面程序要做的是,5次循环,每次循环给x加1,赋值给y,然后打印出来, x = tf.Variable(0.0) #返回一个op,表示给变量x加1的操作 x_plus_1 = tf.as ...
- React文档(十)表单
HTML表单元素和 React里的其他DOM元素有些不同,因为它们会保留一些内部的状态.举个例子,这个普通的表单接受唯一的name值: <form> <label> Name: ...
- CRM INBOX 结果增强功能
前段时间接到的需求:INBOX(ICCMP_INBOX)查询结果,多选后弹出选择用户的框,选择用户,带入到单据的PARTNER FUNC的工程师中,并修改单据状态. 其实标准的INBOX的Compon ...