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处理文本文件实现生成指定格式文件的方法
Jul 31 Python
Python中将字典转换为列表的方法
Sep 21 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
深入理解Python对Json的解析
Feb 14 Python
10个Python小技巧你值得拥有
Sep 29 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
python如何删除文件中重复的字段
Jul 16 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
Jun 08 Python
Python select及selectors模块概念用法详解
Jun 22 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 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/07/11 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
php命令行模式代码实例详解
2021/02/26 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
python按比例随机切分数据的实现
2019/07/11 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
满月酒主持词
2014/03/27 职场文书
投资建议书模板
2014/05/12 职场文书
网络妈妈观后感
2015/06/08 职场文书
机器人总动员观后感
2015/06/09 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
python百行代码实现汉服圈图片爬取
2021/11/23 Python
详解CSS3浏览器兼容
2022/12/24 HTML / CSS