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 随机生成中文验证码的实例代码
Mar 20 Python
Python中的引用和拷贝浅析
Nov 22 Python
python处理大数字的方法
May 27 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
Aug 05 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
利用matplotlib实现根据实时数据动态更新图形
Dec 13 Python
TensorFlow的自动求导原理分析
May 26 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php后门URL的防范
2013/11/12 PHP
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
javascript 写类方式之六
2009/07/05 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
2012/08/06 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
javascript实现倒计时关闭广告
2021/02/09 Javascript
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
Python struct模块解析
2014/06/12 Python
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Python sorted对list和dict排序
2020/06/09 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
python wsgiref源码解析
2021/02/06 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
英智兴达软件测试笔试题
2016/10/12 面试题
工程造价专业大专生求职信
2013/10/06 职场文书
法律专业应届本科毕业生求职信
2013/10/25 职场文书
买房子个人收入证明
2014/01/16 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
小学生差生评语
2014/12/29 职场文书