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元组操作实例解析
Sep 23 Python
Python and、or以及and-or语法总结
Apr 14 Python
Python中每次处理一个字符的5种方法
May 21 Python
利用Python爬取可用的代理IP
Aug 18 Python
Python新手们容易犯的几个错误总结
Apr 01 Python
Python的装饰器使用详解
Jun 26 Python
Python实现读取txt文件并转换为excel的方法示例
May 17 Python
获取python的list中含有重复值的index方法
Jun 27 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
Vue+jquery实现表格指定列的文字收缩的示例代码
2018/01/09 jQuery
nodeJS模块简单用法示例
2018/04/21 NodeJs
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
node创建Vue项目步骤详解
2020/03/06 Javascript
Python实现定时任务
2017/02/08 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
Numpy之reshape()使用详解
2019/12/26 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
python os.listdir()乱码解决方案
2021/01/31 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
职业生涯规划书基本格式
2014/01/06 职场文书
初中军训感想300字
2014/03/05 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
银行柜员工作心得体会
2016/01/23 职场文书