Django实现分页显示效果


Posted in Python onOctober 31, 2019

Django中提供了一个类Paginator专门用来管理和处理分页数据,所以我们在使用之前先导入好相应的类,,另外这里我们也导入了待会会用到的处理异常的两个类 EmptyPage和PageNotAnInteger:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

接着编写好视图函数test:

def test(request):
 course_list=CourseVideo.objects.all()
 #生成pagintor对象,定义每页显示10条记录
 paginator=Paginator(course_list,10)

 #获取当前的页码数,默认为1
 page=request.GET.get("page",1)

 #把当前的页码数转换为整数类型
 currentPage=int(page)

 try:
 video_list=paginator.page(page)#获取当前页码的记录
 except PageNotAnInteger:
 video_list=paginator.page(1)#如果用户输入的页码不是整数时,显示第1页的内容
 except EmptyPage:
 video_list=paginator.page(paginator.num_pages)#如果用户输入的页码不是整数时,显示第1页的内容
 
 return render(request, "test.html", locals())

接下来我们完成前端页面的逻辑,这里定义的文件为test.html:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>这里的标题</title>
</head>
<body>
  <div class="manageContent">
  {#数据显示div--start#}
  {% for video in video_list%}
  <div id="{{ video.vidoeContentId }}" class="content9">

   <div class="videomsg">
   <img src="/static/images/favicon.ico" alt="" />
   <span >{{ video.name }}</span>
   </div>
   <span class="courseTime" >{{ video.number }}</span>
   <span class="sourse" >{{ video.source }}</span>
   <span class="status" >{{ video.status }}</span>
   <div class="operate">
   <span style="cursor:pointer;" onclick="ShowUpDiv('upfileDiv','fade1','{{ video.id }}','{{ video.name }}')">上传</span>
   <span style="cursor:pointer;" onclick="ShowEditDiv('editDiv','editfade','{{ video.name }}','{{ video.number }}','{{ video.source }}','{{ video.status }}','{{ video.id }}')" >修改</span>
   <span style="cursor:pointer;" onclick="Showdetail('{{ video.id }}')" >详情</span>
   </div>

   <div id="{{ video.id }}" style="display: none ;overflow:scroll;overflow-x:hidden">

   </div>

  </div>
  {% endfor %}
  {#数据显示div--end#}
  
  {#显示分页导航栏--start#}
  <div class="kkk">
  <ul class="pagination" id="pager" >
   {#上一页按钮开始#}
   {# 如果当前页有上一页#}
   {% if video_list.has_previous %}
   {# 当前页的上一页按钮正常使用#}
   <li class="previous"><a href="/backstage/test/?page={{ video_list.previous_page_number }}" >上一页</a></li>
   {% else %}
   {# 当前页的不存在上一页时,上一页的按钮不可用#}
   <li class="previous disabled"><a href="#" >上一页</a></li>
   {% endif %}
   {#上一页按钮结束#}

   {# 页码开始#}
   {% for num in paginator.page_range %}
   {% if num == currentPage %}
    <li class="liactive"><a class="selected" href="/backstage/test/?page={{ num }}" >{{ num }}</a></li>
   {% else %}
    <li class="itemli"><a href="/backstage/test/?page={{ num }}" >{{ num }}</a></li>
   {% endif %}
   {% endfor %}
   {#页码结束#}

   {# 下一页按钮开始#}
   {% if video_list.has_next %}
   <li class="next"><a href="/backstage/test/?page={{ video_list.next_page_number }}" >下一页</a></li>
   {% else %}
   <li class="next disabled"><a href="#" >下一页</a></li>
   {% endif %}
   {# 下一页按钮结束#}
  </ul>
  </div>
  {#显示分页导航栏--end#}

  </div>

</body>
</html>

至此,分页显示的逻辑完成,更多关于Paginator的语法实例如下:

from django.core.paginator import Paginator
objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain']<br>
p = Paginator(objects,3) # 3条数据为一页,实例化分页对象
print p.count # 10 对象总共10个元素
print p.num_pages # 4 对象可分4页
print p.page_range # xrange(1, 5) 对象页的可迭代范围
 
page1 = p.page(1) # 取对象的第一分页对象
print page1.object_list # 第一分页对象的元素列表['john', 'paul', 'george']
print page1.number # 第一分页对象的当前页值 1
 
page2 = p.page(2) # 取对象的第二分页对象
print page2.object_list # 第二分页对象的元素列表 ['ringo', 'lucy', 'meiry']
print page2.number # 第二分页对象的当前页码值 2
 
print page1.has_previous() # 第一分页对象是否有前一页 False
print page1.has_other_pages() # 第一分页对象是否有其它页 True
 
print page2.has_previous() # 第二分页对象是否有前一页 True
print page2.has_next() # 第二分页对象是否有下一页 True
print page2.next_page_number() # 第二分页对象下一页码的值 3
print page2.previous_page_number() # 第二分页对象的上一页码值 1
print page2.start_index() # 第二分页对象的元素开始索引 4
print page2.end_index() # 第2分页对象的元素结束索引 6

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现图片转字符画的示例
Aug 22 Python
python爬虫获取多页天涯帖子
Feb 23 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 Python
利用OpenCV和Python实现查找图片差异
Dec 19 Python
python实现用户名密码校验
Mar 18 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
python redis存入字典序列化存储教程
Jul 16 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
python如何利用paramiko执行服务器命令
Nov 07 Python
Python xlwings插入Excel图片的实现方法
Feb 26 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 Python
Django实现基于类的分页功能
Oct 31 #Python
python Django框架实现web端分页呈现数据
Oct 31 #Python
python3常用的数据清洗方法(小结)
Oct 31 #Python
Django实现网页分页功能
Oct 31 #Python
8段用于数据清洗Python代码(小结)
Oct 31 #Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 #Python
python实现大量图片重命名
Mar 23 #Python
You might like
谈谈关于php的优点与缺点
2013/04/11 PHP
php写的AES加密解密类分享
2014/06/20 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
js几秒以后倒计时跳转示例
2013/12/26 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
Python生成不重复随机值的方法
2015/05/11 Python
Python引用模块和查找模块路径
2016/03/17 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
Python中协程用法代码详解
2018/02/10 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
建筑毕业生自我鉴定
2013/10/18 职场文书
药学专业个人的自我评价
2013/12/31 职场文书
yy结婚证婚词
2014/01/10 职场文书
股东合作协议书
2014/04/14 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书