Django学习系列之django分页
基本语法实例
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>
流程:
------->这个是效果图
- 假如目前在第2页,list.html中[if post.has_previous]判断有上一页,然后我们点击上一页按钮,就会发送一个GET请求到views.py的post_list函数,把上一页的页码数传给post_list函数,比如说页码数是1
- post_list函数通过[request.GET.get('page')]获取前端通过GET请求传过来的页码数,通过paginator.page(page),其实就是paginator.page(1)把第1页的数据返回并渲染list.html

Django学习系列之django分页的更多相关文章
- Django学习系列13:Django ORM和第一个模型
ORM—对象关系映射器,是一个数据抽象层,描述存储在数据库中的表,行和列.处理数据库时,可以使用熟悉的面向对象方式,写出更好的代码. 在ORM的概念中,类对应数据库中的表,属性对应列,类的单个实例表示 ...
- Django学习系列之django restframework
曾几何时,Ajax已经统治了Web开发中的客户端,而REST成为web世界中最流行的架构风格(architecture style).所以我们的选择变得很简单:前端ajax访问后端的RESTful A ...
- Django学习系列之Form基础
Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...
- Django学习系列6:使用selenium测试用户交互
学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...
- Django学习系列5:为视图编写单元测试
打开lists/tests.py编写 """向浏览器返回真正的HTML响应,添加一个新的测试方法""" from django.test i ...
- Python&Django学习系列之-激活管理界面
1.创建你个人的项目与APP 2.填写你的数据库名称与数据库类型,这里使用内置的sqllite3 3.修改setting文件 a.将'django.contrib.admin'加入setting的IN ...
- Django学习系列之中间件
中间件的定义 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的请求进行控制 中间件是一类 django请求生命周期 自定义中 ...
- Django学习系列之Form验证
django表单基础 django表单分类 基于django.forms.Form:所有表单类的父类 基于django.forms.ModelForm:可以和模型类绑定的Form Form验证流程 定 ...
- Django学习笔记之Django中间件
准备 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰 ...
随机推荐
- postgresql update from
1,update from 关联表的更新 update table a set name=b.name from table B b where a.id=b.id; update test ...
- mac webstrom 安装less
1.检验电脑是否安装less lessc -v 2.如果没有执行全局安装命令 npm install -g less 3.webstrom -> Preferencs-> File Wat ...
- 让xamarin的Entry绑定时,支持Nullable类型
xamarin.forms默认情况下,如果属性是double?类型,绑定到Entry上,是无法实现双向绑定的, 可以自定义Converter实现双向绑定 public class NullableCo ...
- baidu让用户更快看到首页
//让用户更快看到首页 if(!location.hash.match(/[^a-zA-Z0-9]wd=/)) { document.getElementById("wrapper" ...
- js中5中继承方式分析
//1.借用式继承 把sup的构造函数里的属性方法克隆一份sub实例对象 function Super(){ this.val = 1; this.fun1 = f ...
- PHP中设置session过期的时间
如何严格限制session在30分钟后过期!1.设置客户端cookie的lifetime为30分钟:2.设置session的最大存活周期也为30分钟:3.为每个session值加入时间戳,然后在程序调 ...
- Mysql 字符函数详解
MySql 所有字符串函数函数详解 ASCII(str) 返回str最左边第一位字符的ASCII编码,如果str为空,则返回 0 .如果str为NULL,则返回NULL -- 只返回a的ASCII编码 ...
- delphi GDI+ [1]
摘抄自:万一的博客 安装头文件:http://www.cnblogs.com/del/archive/2008/06/06/1215319.html 目录 基本使用方法(绘制直线) 绘制一组直线 绘制 ...
- php 实现301重定向跳转实例代码
本文主要介绍php 实现301重定向跳转,通过实例代码让大家更好的理解重定向的方法,有需要的小伙伴可以参考下 在php中301重定向实现方法很简单我们只要简单的利用header发送301状态代码,然后 ...
- QueryParser
[概述] 其他工具类使用比较方便,但不够灵活.QueryParser也实现了较多的匹配方式. [QueryParser的应用] /** * 使用QueryParser进行查询 * @throws Pa ...