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中的分页器的更多相关文章

  1. django中的分页器组件

    目录 django的组件-分页器 引入分页器 分页器demo 创建数据库模型 url控制器 views视图函数 templates模板 为什么要用分页器 导入分页器 分页器优化1 分页器优化2 有多少 ...

  2. Django 中的 WSGI

    Django 源码小剖: Django 中的 WSGI 2013-09-06 22:31 by 捣乱小子, 334 阅读, 0 评论, 收藏, 编辑 Django 其内部已经自带了一个方便本地测试的小 ...

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

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

  4. Django中的ORM相关操作:F查询,Q查询,事物,ORM执行原生SQL

    一    F查询与Q查询: 1 . F查询: 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的 ...

  5. django中的路由控制详解

    一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 一 Django中路由的作用 URL配置(URLconf) ...

  6. Django:Django中的ORM

    一.Django项目使用MySQL数据库 1,在Django项目的settings.py,文件中,配置数据库连接信息: DATABASES = { "default": { &qu ...

  7. 转 Django中的Form

    https://www.cnblogs.com/chenchao1990/p/5284237.html Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 ...

  8. django中的分页管理

    有时,展示的对象太多,需要对他们进行分页展示,不能一页把所有的结果都展示出来吧,那样的话,哈哈,挺逗 使用Django分页器功能 从Django中导入Paginator模块(没有的话,自行下载,我是w ...

  9. django中的ORM与 应用与补充

    目录 django中的ORM与 应用与补充 ORM与数据的对应关系 ORM 常用字段 ORM 其他字段 自定义字段 字段参数 Model Meta参数 常用13中查询(必会) 单表查询的双下划线应用 ...

随机推荐

  1. [笔记] SQL性能优化 - 避免使用 IN 和 NOT IN

    WHY? IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢? 1.效率低 可以参看我之前遇到的一个例子([小问题笔记(九)] SQL语句Not IN 效率低,用 NOT EXISTS试试 ...

  2. Codeforces Round #495 (Div. 2) D. Sonya and Matrix

    http://codeforces.com/contest/1004/problem/D 题意: 在n×m的方格中,选定一个点(x,y)作为中心点,该点的值为0,其余点的值为点到中心点的曼哈顿距离. ...

  3. 浅了解:react为何需要设定唯一key值(antd-table)

    一.React规范 1.1 react key的作用 当渲染重复数据的时候,React.diff会根据生成的key进行虚拟DOM渲染, 所以我们需要在遍历的地方都要加上key,例如map.for等等 ...

  4. Series 和 Dataframe 的 rank 方法

    rank 方法返回的是当前数据的排名名次,而 sort——values() 返回的是排名之后数据的结果 rank()用法 sort_values()用法

  5. 改写element-ui中的日期组件

    如果你想实现一个自定义的日期组件规则如下:日期组件未点开前左右两边有前一天后一天控制箭头,且前一天后一天有数据时才显示箭头,没有数据时,快速切换箭头隐藏.当日期组件点开后,有数据的天为可点击状态,无数 ...

  6. Eclispe创建maven工程缺失web.xml报web.xml is missing and <failOnMissingWebXml> is set to true的错误

    Eclispe创建maven工程缺失web.xml报web.xml is missing and <failOnMissingWebXml> is set to true的错误,一看,还缺 ...

  7. Angular 学习笔记 (Material Select and AutoComplete)

    记入一些思考 : 这 2 个组件有点像,经常会搞混. select 的定位是选择. 目前 select 最糟糕的一点是 not search friendly. 还有当需要 multiple sele ...

  8. 20175317 《Java程序设计》第四周学习总结

    20175317 <Java程序设计>第四周学习总结 教材学习内容总结 第四周我学习了教材第五章的内容,了解了子类与继承的知识,学到了以下内容: 明白了什么是子类与父类.类的树形结构. 子 ...

  9. English trip V2 - A 1. Fastival Teacher:Julia Key:

    In this lesson you will learn to talk about dates and times. 课上内容(Lesson) Tell your tutor about a fe ...

  10. ionic 解决APP安装到android上 状态栏显示黑色

    首先移除原本的 cordova-plugin-statusbar 运行命令: cordova plugin rm cordova-plugin-statusbar 最后需要重新安装: cordova ...