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数据结构与算法之字典树实现方法示例
Dec 13 Python
Python sorted函数详解(高级篇)
Sep 18 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
对pytorch中的梯度更新方法详解
Aug 20 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
python在不同条件下的输入与输出
Feb 13 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
python爬虫利用代理池更换IP的方法步骤
Feb 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
层叠菜单的动态生成
2006/10/09 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
python实现扫描日志关键字的示例
2018/04/28 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
Python ORM编程基础示例
2020/02/02 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
DHC美国官网:日本通信销售第一的化妆品品牌
2017/11/12 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
党员2014两会学习心得体会
2014/03/17 职场文书
上海世博会口号
2014/06/19 职场文书
运动会报道稿300字
2014/10/02 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
redis复制有可能碰到的问题汇总
2022/04/03 Redis