阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

高阶应用-分页

76次阅读
没有评论

共计 2396 个字符,预计需要花费 6 分钟才能阅读完成。

一、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():返回当前页的数据 (对象) 个数

三、示例

  • 路由配置

    path(r'^stupage/<int:nowPage>/$',views.stuPage,name='page'),
  • 视图

    def stuPage(req,nowPage): allStu = Students.stuObj.all() pag = Paginator(allStu,6) if int(nowPage)>=int(pag.num_pages): nowPage = pag.num_pages try: page = pag.page(nowPage) except: page = pag.page(pag.num_pages) # print(page) return render(request,'studentPage.html',{'students':page})
  • 模板

    <!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>

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-05-26发表,共计2396字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中