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


Posted in Python onMay 10, 2019

本文实例讲述了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">«</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">«</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">»</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">»</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程序设计有所帮助。

Python 相关文章推荐
Python的函数嵌套的使用方法
Jan 24 Python
一文总结学习Python的14张思维导图
Oct 17 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
Python的iOS自动化打包实例代码
Nov 22 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
python实现nao机器人手臂动作控制
Apr 29 Python
Python调用.NET库的方法步骤
Dec 27 Python
python代码实现TSNE降维数据可视化教程
Feb 28 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
python 实现的车牌识别项目
Jan 25 Python
使用scrapy实现增量式爬取方式
Jun 21 Python
Django框架验证码用法实例分析
May 10 #Python
Python爬虫实现验证码登录代码实例
May 10 #Python
详解如何管理多个Python版本和虚拟环境
May 10 #Python
不到40行代码用Python实现一个简单的推荐系统
May 10 #Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 #Python
Python3列表内置方法大全及示例代码小结
May 10 #Python
详解python 爬取12306验证码
May 10 #Python
You might like
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
PHP概率计算函数汇总
2015/09/13 PHP
php简单统计在线人数的方法
2016/05/10 PHP
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
详解django.contirb.auth-认证
2018/07/16 Python
Django model update的多种用法介绍
2020/03/28 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
centos7之Python3.74安装教程
2019/08/15 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
"序列点" 是什么
2016/07/29 面试题
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
路政管理专业个人自荐信范文
2013/11/30 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
小学语文教学反思
2014/02/10 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
Python的这些库,你知道多少?
2021/06/09 Python