基本语法实例

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. vue ---- Object的一些常用的方法

    在对象上添加新属性的几种方法: 直接附代码: 法一:Es6扩展运算符添加属性 法二:利用语法Object.assign(target, ...sources)    target目标对象.source ...

  2. template or render function not defined.

    template or render function not defined. H_婷 关注 2018.08.16 17:22 字数 106 阅读 3859评论 0喜欢 2 下午写 Vue $par ...

  3. 防止asp.net连续点击按钮重复提交

    1.在Page_Load中添加如下代码: protected void Page_Load(object sender, EventArgs e) { this.btnEdit.Attributes[ ...

  4. 如何用SQL语句在指定字段前面插入新的字段?

    如何用SQL语句在指定字段前面插入新的字段? 2007-10-17 09:28:00|  分类: 笔记|举报|字号 订阅     create proc addcolumn @tablename va ...

  5. jquery attr的属性

    在JS中设置节点的属性与属性值用到setAttribute(),获得节点的属性与属性值用到getAttribute(),而在jquery中,用一个attr()就可以全部搞定了,赞一个先 ^^ jque ...

  6. LeetCode(61) Rotate List

    题目 Given a list, rotate the list to the right by k places, where k is non-negative. For example: Giv ...

  7. Spring 事物注解属性

    @Transactional属性 . propagation 事物的传播属性 . isolation 事物的隔离属性 . readonly 设置只读属性 . timeout 设置超时属性 . roll ...

  8. python 爬虫示例,方便日后参考

    参考网址:https://zhuanlan.zhihu.com/p/32037625 def getOneMoviesInfo(Mid,url): import requests from lxml ...

  9. 九度oj 题目1064:反序数

    题目1064:反序数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5163 解决:3698 题目描述: 设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)求N的 ...

  10. oracle 互锁的sql查询

    SELECT DECODE(request, 0, 'Holder: ', 'Waiter: ') || sid sess,       id1,       id2,       lmode,    ...