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 11 Python
python使用htmllib分析网页内容的方法
May 08 Python
在Python的Django框架中加载模版的方法
Jul 16 Python
Python 文件处理注意事项总结
Apr 10 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
详解Python中where()函数的用法
Mar 27 Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 Python
python实现图片插入文字
Nov 26 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
Python3.8安装Pygame教程步骤详解
Aug 14 Python
基于django和dropzone.js实现上传文件
Nov 24 Python
分享Python获取本机IP地址的几种方法
Mar 17 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
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
PHP安全编程之加密功能
2006/10/09 PHP
Git命令之分支详解
2021/03/02 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
Javascript缓存API
2016/06/14 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
python中的内置函数getattr()介绍及示例
2014/07/20 Python
Python列表append和+的区别浅析
2015/02/02 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
Python随机读取文件实现实例
2017/05/25 Python
python实现Windows电脑定时关机
2018/06/20 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
Python操作Mongodb数据库的方法小结
2019/09/10 Python
python getpass模块用法及实例详解
2019/10/07 Python
Python如何急速下载第三方库详解
2020/11/02 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
Python安装Bs4的多种方法
2020/11/28 Python
报到证丢失证明
2014/01/11 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
委托书的写法
2014/09/16 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
工程主管竞聘书
2015/09/15 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
JavaScript实现简单拖拽效果
2021/09/15 Javascript