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配置文件解析模块ConfigParser使用实例
Apr 13 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
Nov 30 Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
Windows下安装Scrapy
Oct 17 Python
python web自制框架之接受url传递过来的参数实例
Dec 17 Python
Python完成毫秒级抢淘宝大单功能
Jun 06 Python
使用 Python 遍历目录树的方法
Feb 29 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
python中tab键是什么意思
Jun 18 Python
pytorch实现查看当前学习率
Jun 24 Python
使用anaconda安装pytorch的实现步骤
Sep 03 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 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
基于python的汉字转GBK码实现代码
2012/02/19 Python
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
python中异常捕获方法详解
2017/03/03 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
2017/10/15 Python
Python实现DDos攻击实例详解
2019/02/02 Python
python二进制文件的转译详解
2019/07/03 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
美国存储和组织商店:The Container Store
2017/08/16 全球购物
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
行政助理岗位职责范文
2013/12/03 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
人事专员岗位说明书
2014/07/29 职场文书
会计做账心得体会
2016/01/22 职场文书
python缺失值的解决方法总结
2021/06/09 Python