前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高阶应用-分页

高阶应用-分页

作者头像
星哥玩云
发布2022-09-14 17:30:27
3680
发布2022-09-14 17:30:27
举报
文章被收录于专栏:开源部署

一、Paginator对象

  • 创建对象 格式:Paginator(列表, 整数) 返回值:返回的分页对象
  • 属性 count:对象总数 num_pages:页面总数 page_range: [1,2,3,4,5] 页码从1开始
  • 方法 page(num) :获得一个Page对象,如果提供的页码不存在会抛出"InvalidPage"异常
  • 异常
    • InvalidPage:当向page()传递的是一个无效的页码时抛出
    • PageNotAnInteger:当向page()传递的不是一个整数时抛出
    • EmptyPage:当向page()传递一个有效值,但是该页面时没有数据时抛出

二、Page对象

  • 创建对象 Paginator对象的page()方法返回得到Page对象(不需要手动创建)
  • 属性
    • object_list:当前页上所有的数据(对象)列表
    • number:当前页的页码值
    • paginator:当前page对象关联的paginator对象
  • 方法
    • has_next: 判断是否有下一页,如果有返回True
    • has_previous:判断是否有上一页,如果有返回True
    • has_other_pages:判断是否有上一页或下一页,如果有返回True
    • next_page_number:返回下s一页的页码,如果下一页不存在抛出InvalidPage异常
    • previous_page_number:返回上一页的页码,如果上一页不存在抛出InvalidPage异常
    • len():返回当前页的数据(对象)个数

三、示例

路由配置

代码语言:javascript
复制
path(<span class="hljs-string">r'^stupage/&lt;int:nowPage&gt;/$'</span>,views.stuPage,name=<span class="hljs-string">'page'</span>),

视图

代码语言:javascript
复制
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">stuPage</span><span class="hljs-params">(req,nowPage)</span>:</span>
    allStu = Students.stuObj.all()
    pag = Paginator(allStu,<span class="hljs-number">6</span>)
    <span class="hljs-keyword">if</span> int(nowPage)&gt;=int(pag.num_pages):
         nowPage = pag.num_pages
    <span class="hljs-keyword">try</span>:
        page = pag.page(nowPage)
    <span class="hljs-keyword">except</span>:
        page = pag.page(pag.num_pages)
    <span class="hljs-comment"># print(page)</span>
    <span class="hljs-keyword">return</span> render(request,<span class="hljs-string">'studentPage.html'</span>,{<span class="hljs-string">'students'</span>:page})

模板

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
展示分页的数据
{% for i in data.object_list %}
	<p>{{ i.username }}</p>
{% endfor %}
  
展示分页的页码
<nav aria-label="Page navigation">
  <ul class="pagination">
  <li>
      <a href="{% url 'App:showPage' %}?page=1" aria-label="Next">
        <span aria-hidden="true">首页</span>
      </a>
    </li>
    <li {% if not data.has_previous %}class="disabled"{% endif %}>
      <a {% if data.has_previous %}
      href="{% url 'App:showPage' %}?page={{ data.previous_page_number }}"
      {% endif %} aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
      {% for index in data.paginator.page_range %}
            <li  {% if index == data.number %}class="active"{% endif %}><a href="{% url 'App:showPage' %}?page={{ index }}">{{ index }}</a></li>
      {% endfor %}
    <li {% if not data.has_next %}class="disabled"{% endif %}>
      <a {% if data.has_next %}
      href="{% url 'App:showPage' %}?page={{ data.next_page_number }}"
      {% endif %} aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
    <li {% if not data.paginator.num_pages %}class="disabled"{% endif %}>
      <a {% if data.paginator.num_pages %}
      href="{% url 'App:showPage' %}?page={{ data.paginator.num_pages }}"
      {% endif %} aria-label="Next">
        <span aria-hidden="true">尾页</span>
      </a>
    </li>
  </ul>
</nav>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</body>
</html>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Paginator对象
  • 二、Page对象
  • 三、示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档