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. 自动化测试系列:自动化测试KPI考评的一种方法

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6856204.html 众所周知,在IT ...

  2. [CodeForces - 463B] Caisa and Pylons

    题目链接:http://codeforces.com/problemset/problem/463/B 求个最大值 AC代码: #include<cstdio> #include<c ...

  3. vi中换行、翻页和查找功能

    vi时,按ESC进入Command模式, 1. 移动光标命令:j 向下移动一行:k 向上移动一行:h 向左移动一个字符:l 向右移动一个字符:对于 j.k.l和h键,命令前加数字,移动多行:如 3j, ...

  4. python学习----IO模型

    一.IO模型介绍 本文讨论的背景是Linux环境下的network IO. 本文最重要的参考文献是Richard Stevens的"UNIX® Network Programming Vol ...

  5. 获取添加数据的自增ID

    $id= DB::select("select auto_increment from information_schema.`TABLES` where table_name='stude ...

  6. MySQL中case then用法

    1.查询图书价格,若价格为null,则显示unknown,若价格为10到20, 则显示10 to 20 SELECT price, CASE WHEN price='null' THEN 'UnKno ...

  7. Spring boot actuator端点启用和暴露

    1.启用端点 默认情况下,除了shutdown端点是关闭的,其它的都是启用的.配置一个端点的启用,使用management.endpoint..enabled属性,下面的例子是启用shutdown端点 ...

  8. js对象的深拷贝

    关于对象的深拷贝一直是大家津津乐道一个话题,本骚年通过研究(yuedu)发现还是很easy的. 首推的方法简单有效,JSON.stringfy()和JSON.parse()即可搞定.但是这种简单粗暴的 ...

  9. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example 1.4 Labeling the Map

    MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example 1.4 Labeling the Map 一.前言 MapServer拥有非常灵活的标签 ...

  10. windows下《Go Web编程》之Go环境配置和安装

    <Go Web编程>笔者是基于unix下讲述的,作为入门练手,我选择在windows下开发,全程按照目录进行... 一.安装 windows下需要安装MinGW,通过MinGW安装gcc支 ...