基本语法实例

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

最新文章

  1. Java:Remote Debug
  2. Photosohp 2017 已经发布!(下载地址及破解方法在文章底部)
  3. html转义字符
  4. MySQL存储引擎之InnoDB
  5. 设置只为View加一条边框,子视图大小超出父视图大小,边框在子视图下边显示
  6. ligerui grid行编辑示例
  7. libXml ARC forbids explicit message send of&#39;release&#39;
  8. Maven学习系列二(1-5)
  9. 学c语言做练习
  10. N皇后问题 深搜+剪枝 hdu-2553
  11. 反编译python打包的exe文件
  12. python 爬虫新解
  13. luogu 1484\1792 种树 奇怪的贪心可反悔
  14. SQL注入理解与防御
  15. windows IOCP入门的一些资料
  16. Linux命令(十五) 打包或解压文件 tar
  17. Android 编程下通过 Theme 和 Style 避免 APP 启动闪黑屏
  18. js生成验证码并且验证
  19. Curved UI - VR Ready Solution To Bend Warp Your Canvas 1.7,1.8,2.2,2.3 四种版本压缩包(Unity UGUI曲面插件),可以兼容VRTK
  20. UVALive - 6893 The Big Painting 字符串哈希

热门文章

  1. 为什么jfinal的控制器不用单例模式
  2. 把WebForm移植到.Net MVC中
  3. WPF小记 -- 使用Path自己画图标,点击命中(焦点)丢失问题
  4. 使用GetLogicalDriveStrings获取卷标
  5. 详解 pcap_findalldevs_ex
  6. HDU1401 Solitaire
  7. 向数据库添加中文数据乱码的解决办法(本文使用spring-jdbcTemplate)
  8. PHP读取超大的excel文件数据的方案
  9. PHP:POST OR GET 请求
  10. 82-Ichimoku Kinko Hyo 一目平衡表.(2015.7.3)