网络编程
位置:首页>> 网络编程>> Python编程>> Django框架实现分页显示内容的方法详解

Django框架实现分页显示内容的方法详解

作者:微信1257309054  发布时间:2023-05-31 17:06:38 

标签:Django,分页

本文实例讲述了Django框架实现分页显示内容的方法。分享给大家供大家参考,具体如下:

分页

1、作用

数据加载优化

2、前端引入bootstrap样式:


{# 引入bootstrap样式的cdn资源 #}
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet">

引入分页器:


<div id="rootbox">
 <h1>文章列表</h1>
 <ul id="bloglist">
   {# 遍历博文 #}
   {% for blog in page.object_list %}
     {# 显示博文标题 #}
     <li>
       <a href="{% url 'app:readblog' blog.id %}" rel="external nofollow" ><h3>{{ blog.title }}</h3></a>
     </li>
   {% endfor %}
 </ul>
 {#分页器:html内容拷贝于bootstrap网站-组件-分页#}
 {# bootstrap是一整套成熟经典的页面组件框架 #}
 <nav aria-label="Page navigation">
   <ul class="pagination">
     {# 上一页按钮 #}
     {# 如果有上一页 #}
     {% if page.has_previous %}
       <li>
         {# 点击超链接,对上一页的页面发起访问 #}
         <a href="{% url 'app:blogs' page.previous_page_number %}" rel="external nofollow" aria-label="Previous">
           <span aria-hidden="true">&laquo;</span>
         </a>
       </li>
     {# 如果没有上一页 #}
     {% else %}
       {# 当没有上一页时,阅读bootrap文档得知,对当前li使用disabled样式 #}
       <li class="disabled">
         {# href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ,处于禁用状态的按钮被点击时直接跳转本页 #}
         <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" aria-label="Previous">
           <span aria-hidden="true">&laquo;</span>
         </a>
       </li>
     {% endif %}
     {# 页码按钮 #}
     {# 遍历传入的页码范围 #}
     {% for p in pagerange %}
       {# 如果页码=当前页页码 #}
       {% ifequal p currentpage %}
         {# 被选中的页码具有高亮效果,阅读bootrap文档得知,对当前li使用active样式 #}
         {# {% url 'app:blogs' p %} 点击页码,对第p页的路由发起访问 #}
         <li class="active"><a href="{% url 'app:blogs' p %}" rel="external nofollow" rel="external nofollow" >{{ p }}</a></li>
       {% else %}
         {# 非当前页页码普通显示 #}
         <li><a href="{% url 'app:blogs' p %}" rel="external nofollow" rel="external nofollow" >{{ p }}</a></li>
       {% endifequal %}
     {% endfor %}
     {# 下一页按钮 #}
     {% if page.has_next %}
       <li>
         {# 点击超链接,对下一页的页面发起访问 #}
         <a href="{% url 'app:blogs' page.next_page_number %}" rel="external nofollow" aria-label="Next">
           <span aria-hidden="true">&raquo;</span>
         </a></li>
     {% else %}
       {# 当没有下一页时,阅读bootrap文档得知,对当前li使用disabled样式 #}
       <li class="disabled">
         {# href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ,处于禁用状态的按钮被点击时直接跳转本页 #}
         <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" aria-label="Next">
           <span aria-hidden="true">&raquo;</span>
         </a></li>
     {% endif %}
   </ul>
 </nav>
</div>

3、Paginator

  • 数据分页工具

  • 对象创建

    • Paginator(数据集,每一页数据数)

  • 属性

    • count:对象总数

    • page_range:页码列表,从1开始

    • num_pages:页面总数

  • 方法

    • page(整数): 获得一个page对象

  • 常见错误

    • InvalidPage:page()传递无效页码

    • PageNotAnInteger:page()传递的不是整数

    • Empty:page()传递的值有效,但是没有数据

4、Page

  • 具体的某一页面

  • 对象获得,通过Paginator的page()方法获得

  • 属性

    • object_list:当前页面上所有的数据对象

    • number:当前页的页码值

    • paginator: 当前page关联的Paginator对象

  • 方法

    • has_next():判断是否有下一页

    • has_previous():判断是否有上一页

    • has_other_pages():判断是否有上一页或下一页

    • next_page_number():返回下一页的页码

    • previous_page_number():返回上一页的页码

    • len():返回当前页的数据的个数


# 显示博文列表
# pagenum=路由参数=用户想要查看第几页
def showBlogs(request, pagenum):
 # 查询数据库获取所有博文
 blogs = Blog.objects.all()
 # 构建分页器对象,blogs=所有博文,2=每页显示的个数
 paginator = Paginator(blogs, 2)
 # 获取第n页的页面对象
 page = paginator.page(pagenum)
 # Paginator和Page的常用API
 # page.previous_page_number()
 # page.next_page_number()
 # page.has_previous()
 # page.has_next()
 # 构造页面渲染的数据
 '''
 渲染需要的数据:
 - 当前页的博文对象列表
 - 分页页码范围
 - 当前页的页码
 '''
 data = {
   # 当前页的博文对象列表
   'page': page,
   # 分页页码范围
   'pagerange': paginator.page_range,
   # 当前页的页码
   'currentpage': page.number,
 }
 # 将数据丢给页面渲染
 return render(request, 'blogs.html', context=data)

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

来源:https://blog.csdn.net/lm_is_dc/article/details/80528010

0
投稿

猜你喜欢

  • 原作者:Jason MannInternet Magazine showed that people do not read on the
  • 有时候让了解放双手,让电脑来帮我们自动发一些我们想要发的消息,挺省力的,比如说白天写好了演讲稿,晚上要在群里进行文字演讲,那么我们就可以用脚
  • 在CentOS上安装MySQL数据库服务器后,系统出于安全性考虑,缺省不支持用户通过非本机连接上数据库服务器,如果想让用户通过另外一台机器连
  • 在讲CSS优先级之前,我们得要了解什么是CSS,CSS是用来做什么的。首先,我们对CSS作一个简单的说明:CSS是层叠样式表(Cascadi
  • messageboxtkinter.messagebox中封装了多种消息框,其输入参数统一为title, message以及其他参数。其中t
  • 简介如何简单的使用python来实现将一部视频转换为字符画视频的效果。 其实,大家都知道视频就是一帧一帧的图片构成的。  
  • 因为一个需求,因为自己想多了一点东西,最后发现了一个问题,一个很奇怪的问题。这个问题我想还是我自己当初想法上的出路导致的吧,但想不通为什么会
  • 类似于and操作类似于or操作# 类型转换# sortedli=[2,45,1,67,23,10]li.sort() #list的排序方法p
  • 自动上次ymPrompt组件发布,自己就曾发现在IE8下遮罩的半透明滤镜有时无效的问题,后来也有网友提出过这个问题,但自己一直也没有太多关注
  • 当我们想复制两个一模一样的列表时,我们可能使用到list.copy()这个方法,这个方法可以让我们复制一个相同的数组,当遇到下面这种情况时,
  • 这是 COMSHARP CMS 团队翻译的2009年海外Web设计风潮的第二部分,着重讲解了反 Box 式布局,单页布局,多栏布局,巨型插图
  • 问题有二进制文件中保存了 20 亿个 2 Bytes 的数,需将其读出,每 20000 个数作图,拟合后输出结果。解决# -*- codin
  • 使用Python IDLE时发现并没有清空当前窗口的快捷键,也没有像 clear 这样的命令,使用非常不便。新建一个 ClearWindow
  • 可能各位朋友看到这个标题很不解,到底什么是习惯化,什么又是去习惯化?下面我来慢慢介绍我的个人理论。习惯化:随着对刺激的熟悉,人们越来越注意不
  • 前言地图定位这个功能大家都很熟悉吧,那微信小程序中要怎么实现地图定位呢,其实非常简单,没有大家想象中那么难,看完本篇文章,你也可以轻松实现这
  •  相信为数不少的系统管理员每天都在做着同一样的工作——对数据进行备份。一旦哪一天疏忽了,而这一天系统又恰恰发生了故障,需要进行数据
  • 工作时常遇到需要在其它地方拷贝样式,比如Firebug之类的,但是复制出来的样式是带有换行和空格的,对于我这种有点洁癖的人来说,经常会一个个
  • 本文实例介绍了asp对access数据库常见操作方法,查找记录,添加记录更新记录,删除记录等。一、查找记录find.htm<HTML&
  • 听说firefox是史上最好用的浏览器,便下载下来体验一番,将体验感受与大家分享一下,并和我一直使用的the world浏览器做一个对比!首
  • 最近,我不得不对我的一个客户的旧网站进行更新,使得它能够达到可访问性的标准。对三四年前的旧代码进行挖掘的想法根本没有吸引力,主要是因为我曾经
手机版 网络编程 asp之家 www.aspxhome.com