首页 > 编程 > Python > 正文

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

2019-11-25 12:54:43
字体:
来源:转载
供稿:网友

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表