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的Django框架部署的一些建议
Apr 09 Python
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 Python
Python星号*与**用法分析
Feb 02 Python
Python中反射和描述器总结
Sep 23 Python
对python中类的继承与方法重写介绍
Jan 20 Python
Django框架实现的普通登录案例【使用POST方法】
May 15 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
分享PyCharm的几个使用技巧
Nov 10 Python
Python3实现配置文件差异对比脚本
Nov 18 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
python如何基于redis实现ip代理池
Jan 17 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
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
[原创]PHP字符串中插入子字符串方法总结
2016/05/06 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
vue实现循环切换动画
2018/10/17 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
wxPython使用系统剪切板的方法
2015/06/16 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
Python实现word2Vec model过程解析
2019/12/16 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
数据库笔试题
2013/05/09 面试题
政府绩效管理实施方案
2014/05/04 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
七一建党节慰问信
2015/02/14 职场文书
python脚本框架webpy模板赋值实现
2021/11/20 Python