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执行get提交的方法
Apr 29 Python
Python中的choice()方法使用详解
May 15 Python
Python3.5面向对象编程图文与实例详解
Apr 24 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
Python使用Tkinter实现滚动抽奖器效果
Jan 06 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 Python
Python利用socket模块开发简单的端口扫描工具的实现
Jan 27 Python
Python道路车道线检测的实现
Jun 27 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
set_include_path在win和linux下的区别
2008/01/10 PHP
深入理解PHP之require/include顺序 推荐
2011/01/02 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
详解Python中的Cookie模块使用
2015/07/06 Python
简述Python中的进程、线程、协程
2016/03/18 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
python实现随机漫步算法
2018/08/27 Python
python实现flappy bird小游戏
2018/12/24 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
python MD5加密的示例
2020/10/19 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
中海讯通笔试题
2015/09/15 面试题
农田水利实习自我鉴定
2013/09/19 职场文书
工商管理实习自我鉴定
2013/09/28 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
小学庆六一活动总结
2014/08/28 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
基于tensorflow权重文件的解读
2021/05/26 Python