基本语法实例

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. VS2010 好用的javascript扩展工具

    工具1) JScript Editor Extensions 折叠代码 下载地址: JScript Editor Extensions 工具2) Javascript parser 以树形方式查的代码 ...

  2. [转]c++应用程序文件的编译过程

    原文地址 这里讲下C++文件的编译过程及其中模板的编译过程: 一:一般的C++应用程序的编译过程.    一般说来,C++应用程序的编译过程分为三个阶段.模板也是一样的. 在cpp文件中展开inclu ...

  3. CREATE RULE - 定义一个新的重写规则

    SYNOPSIS CREATE [ OR REPLACE ] RULE name AS ON event TO table [ WHERE condition ] DO [ INSTEAD ] { N ...

  4. Linux运维到底是做什么的?在开始学习之前,你必须了解这些!

    首先祝贺你选择学习Linux,你可能即将踏上Linux的工作之旅,出发之前,让我带你来看一看关于Linux和Linux运维的一切. Linux因其高效率.易于裁剪.应用广等优势,成为了当今中高端服务器 ...

  5. 第2节 hive基本操作:10、外部分区表综合练习

    外部分区表综合练习: 需求描述:现在有一个文件score.csv文件,存放在集群的这个目录下/export/servers/scoredatas/month=201806,这个文件每天都会生成,存放到 ...

  6. show()的几种方法

    1 show()方法和hide()方法 $("selector").show()  从display:none还原元素默认或已设置的display属性$("selecto ...

  7. [SCOI2011]棘手的操作(可并堆/并查集/线段树)

    我懒死了 过于棘手 但这题真的很水的说 毕竟写啥都能过 常见思路: ①:由于不强制在线,所以重新编号之后线段树维护 ②:用各种可以高速合并的数据结构,比如可并堆,可并平衡树啥的 讲一种无脑算法: 对于 ...

  8. docker安装配置lnmp

    一.安装配置docker 1.下载docker:yum install -y docker 2.设置docker远程镜像地址为国内路径:curl -sSL https://get.daocloud.i ...

  9. 树莓派 -- oled 续(1) wiringPi

    在上文中,分析了wiringPi 的oled demo是使用devfs来控制spi master和spi slave通讯. https://blog.csdn.net/feiwatson/articl ...

  10. eclipse 导入svn项目并添加server

    1.打开svn资源库 window-->show view-->other-->svn-->svn资源库 2.控制台选中文件夹右键-->检出为--finish 3.添加服 ...