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. Oracle 客户端 NLS_LANG 的设置

    参考链接1: https://blog.csdn.net/xinzhan0/article/details/78311417#t3 参考链接2: https://blog.csdn.net/xinzh ...

  2. Cookie和Seesion

    会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...

  3. Intellj IDEA光标问题

    Intellj IDEA光标为insert状态,无法删除内容以前用得是社区版的IDEA,今天装了14版本的,结果导入项目后,发现打开java文件的光标是win系统下按了insert键后的那种宽的光标, ...

  4. gym 101081 E. Polish Fortress 几何

    E. Polish Fortress time limit per test 2.0 s memory limit per test 256 MB input standard input outpu ...

  5. 查漏补缺之——Java多线程

    复习面试题中遇到锁的内容当时大一学习的时候感觉懵懂,现在重新复习一下. 1.1多线程 1.1.1线程 1.什么是线程 线程是程序执行的一条路径,一个进程中包含多条进程 2.并行与并发 并行是两个任务同 ...

  6. [原][译]JSBSim官方源码文档翻译(google翻译)

    /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLASS DOCUMENTATION ...

  7. 自定义Cordova插件详解

    一.Cordova的基础点 在混合式应用中,我们通过现有的Cordova插件,可以轻松的在 H5 上调用手机native的功能.现有的Cordova插件能满足平时大部分的开发需求,然而,有时候找不到合 ...

  8. Web版记账本开发记录(七)

    经过不懈的努力,虽然开发出来的还有瑕疵,但今后我会继续努力的.

  9. React文档(九)list和key

    首先,我们回顾一下在js里如何转换数组. 给出下面的代码,我们使用map()函数来获取一个数组的numbers然后将值变成两倍大.我们分配新数组由map()返回: const numbers = [1 ...

  10. jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详解

    1.(function($) {…})(jQuery); 1).原理: 这实际上是匿名函数,如下: function(arg){…} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写 ...