基本语法实例

from django.core.paginator import Paginator 

objects = Post.objects.filter(status='published') #从数据库中取出所有status=published状态的文章
p = Paginator(objects,) #实例化Paginator对象,3条数据为一页
print(p.count) #一共有多少条数据
print(p.num_pages) #一共可以分为多少页
page1 = p.page() #取第一页的数据
page2 = p.page() #取第二页的数据

print(page2.has_previous) #判断第二分页是否有前一页,有则返回True,否则False
print(page2.has_next) #判断第二分页是否有下一页,有则返回Trur,否则False

print(page2.previous_page_number) #返回上一页的页码,如果上一页不存在跑出InvalidPage异常
print(page2.next_page_number) #返回下一页的页码,如果下一页不存在抛出InvalidPage异常

官方实例

views.py

from django.shortcuts import render,get_object_or_404
from django.core.paginator import Paginator, PageNotAnInteger,EmptyPage
# Create your views here. from blog.models import Post def post_list(request):
object_list = Post.objects.filter(status='published')
#每页显示3个
paginator = Paginator(object_list,)
#获取前端传过来的要访问的页面数,比如说去第一页,就传过来1
page = request.GET.get('page')
print(page)
try:
#比如说第一页,就返回第一页的数据
posts = paginator.page(page)
except PageNotAnInteger:
#如果传过来的页面数不是整数,就返回第一页
posts = paginator.page()
except EmptyPage:
#如果传过来的页面数超出范围,就返回最有一夜
posts = paginator.page(paginator.num_pages)
return render(request,'blog/post/list.html',{'posts':posts})

list.html

<div class="pagination">
<span class="step-links">
#如果有上一页的话
{% if posts.has_previous %}
#发一个get请求到views.py的post_list函数,比如?page=1,就是127.0.0.1:8000/blog?page=1,去第一页的意思
<a href="?page={{ posts.previous_page_number }}">上一页</a>
{% endif %}
<span class="current">
       #page 2 of 3,意思就是目前在第二页,一共有三页. post.number返回当前在第几页,num_pages返回一共有多少页
Page {{ posts.number }} of {{ posts.paginator.num_pages }}.
</span>
#如果有下一页的话
{% if posts.has_next %}
#发一个get请求到views.py的post_list函数,比如?page=2,就是127.0.0.1:8000/blog?page=2,去第二页的意思
<a href="?page={{ posts.next_page_number }}">下一页</a>
{% endif %}
</span> </div>

流程:


------->这个是效果图

  1. 假如目前在第2页,list.html中[if post.has_previous]判断有上一页,然后我们点击上一页按钮,就会发送一个GET请求到views.py的post_list函数,把上一页的页码数传给post_list函数,比如说页码数是1
  2. post_list函数通过[request.GET.get('page')]获取前端通过GET请求传过来的页码数,通过paginator.page(page),其实就是paginator.page(1)把第1页的数据返回并渲染list.html

Django学习系列之django分页的更多相关文章

  1. Django学习系列13:Django ORM和第一个模型

    ORM—对象关系映射器,是一个数据抽象层,描述存储在数据库中的表,行和列.处理数据库时,可以使用熟悉的面向对象方式,写出更好的代码. 在ORM的概念中,类对应数据库中的表,属性对应列,类的单个实例表示 ...

  2. Django学习系列之django restframework

    曾几何时,Ajax已经统治了Web开发中的客户端,而REST成为web世界中最流行的架构风格(architecture style).所以我们的选择变得很简单:前端ajax访问后端的RESTful A ...

  3. Django学习系列之Form基础

     Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  4. Django学习系列6:使用selenium测试用户交互

    学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...

  5. Django学习系列5:为视图编写单元测试

    打开lists/tests.py编写 """向浏览器返回真正的HTML响应,添加一个新的测试方法""" from django.test i ...

  6. Python&Django学习系列之-激活管理界面

    1.创建你个人的项目与APP 2.填写你的数据库名称与数据库类型,这里使用内置的sqllite3 3.修改setting文件 a.将'django.contrib.admin'加入setting的IN ...

  7. Django学习系列之中间件

    中间件的定义 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的请求进行控制 中间件是一类 django请求生命周期 自定义中 ...

  8. Django学习系列之Form验证

    django表单基础 django表单分类 基于django.forms.Form:所有表单类的父类 基于django.forms.ModelForm:可以和模型类绑定的Form Form验证流程 定 ...

  9. Django学习笔记之Django中间件

    准备 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰 ...

随机推荐

  1. Java.io.ObjectOutputStream.writeObject()方法实例

    java.io.ObjectOutputStream.writeObject(Object obj) 方法将指定对象写入ObjectOutputStream.该对象的类,类的签名,以及类及其所有超类型 ...

  2. RequireJS 上手使用

    首先 点击此处 得到requirejs. 捣鼓了俩小时终于运行成功了,原因是因为require(['我是空格underscore',...],function(){...})的时候 变量多个空格(坑爹 ...

  3. 泛型术语:占位类型placeholder

    Here’s a generic version of the same code: struct Stack<Element> { var items = [Element]() mut ...

  4. SparkRPC源码分析之RPC管道与消息类型

    SparkRPC源码分析之RPC管道与消息类型我们前面看过了netty基础知识扫盲,那我们应该明白,ChannelHandler这个组件内为channel的各种事件提供了处理逻辑,也就是主要业务逻辑写 ...

  5. CAD参数绘制半径标注(com接口)

    主要用到函数说明: _DMxDrawX::DrawDimRadial 绘制一个半径标注.详细说明如下: 参数 说明 DOUBLE dCenterX 被标注的曲线的中点X值 DOUBLE dCenter ...

  6. 【C语言】控制台窗口图形界面编程(五):文本移动

    目录 00. 目录 01. CHAR_INFO结构 02. ScrollConsoleScreenBuffer函数 03. 程序示例 04. 官方参考程序 00. 目录 01. CHAR_INFO结构 ...

  7. oracle分析函数系列之sum(col1) over(partition by col2 order by col3):实现分组汇总或递增汇总

    语法:sum(col1) over(partition by col2 order by col3 )  准备数据: DEPT_ID    ENAME          SAL1 1000       ...

  8. jquery.form.min.js

    /*! * jQuery Form Plugin * version: 3.51.0-2014.06.20 * Requires jQuery v1.5 or later * Copyright (c ...

  9. eclipse之版本代号

  10. js 技巧 (十)广告JS代码效果大全 【1】

    广告JS代码效果大全 1.[普通效果]     现在很多网站广告做的如火如荼,现在我就来介绍一下常见的对联浮动广告效果的代码使用方法,介绍的这种效果,在1024*768分辨率下正常显示,在800*60 ...