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制作检测Linux运行信息的工具的教程
Apr 01 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
python+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
Python中常用信号signal类型实例
Jan 25 Python
python编写弹球游戏的实现代码
Mar 12 Python
python去除文件中重复的行实例
Jun 29 Python
python实现C4.5决策树算法
Aug 29 Python
python将处理好的图像保存到指定目录下的方法
Jan 10 Python
详解Python正则表达式re模块
Mar 19 Python
python求绝对值的三种方法小结
Dec 04 Python
Python 没有main函数的原因
Jul 10 Python
一文详述 Python 中的 property 语法
Sep 01 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
浅谈PHP 闭包特性在实际应用中的问题
2009/10/30 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
最常用的12种设计模式小结
2011/08/09 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
JS中数组重排序方法
2016/11/11 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
Python中 Lambda表达式全面解析
2016/11/28 Python
Python内存读写操作示例
2018/07/18 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
Python 元组操作总结
2019/09/18 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
html5 标签
2009/07/16 HTML / CSS
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
工程资料员岗位职责
2014/03/10 职场文书
英语教师求职信
2014/06/16 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
九不准学习心得体会
2016/01/23 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python