zoukankan      html  css  js  c++  java
  • 分页

    分页是指在web页面有大量数据需要显示时,当一页的内容太多不利于阅读和不利于数据提取的情况下,可以分为多页进行显示。

    Django提供了一些类来帮助你管理分页的数据 — 也就是说,数据被分在不同页面中,并带有“上一页/下一页”链接。

    这些类位于django/core/paginator.py中。

    一Paginator对象

    1.对象的构造方法

    • Paginator(object_list, per_page)
    • 参数
      • object_list 对象列表
      • per_page 每页数据个数
    • 返回值:
      • 分页对象

    2.Paginator属性

    • count:对象总数
    • num_pages:页面总数
    • page_range:从1开始的range对象, 用于记录当前面码数
    • per_page 每页个数

    3.Paginator方法

    Paginator.page(number)

    • 参数 number为页码信息(从1开始)
    • 返回当前number页对应的页信息
    • 如果提供的页码不存在,抛出InvalidPage异常

    4.Paginator异常exception

    • InvalidPage:当向page()传入一个无效的页码时抛出
    • PageNotAnInteger:当向page()传入一个不是整数的值时抛出
    • EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出

    二Page对象

    创建对象 Paginator对象的page()方法返回Page对象,不需要手动构造

    1.Page对象属性

    • object_list:当前页上所有对象的列表
    • number:当前页的序号,从1开始
    • paginator:当前page对象相关的Paginator对象

    2.Page对象方法

    • has_next():如果有下一页返回True
    • has_previous():如果有上一页返回True
    • has_other_pages():如果有上一页或下一页返回True
    • next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
    • previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常
    • len():返回当前页面对象的个数

    3.说明

      Page 对象是可迭代对象,可以用 for 语句来 访问当前页面中的每个对象

    参考文档https://docs.djangoproject.com/en/1.11/topics/pagination/

    分页示例:

    视图函数

    def book(request):
        bks = models.Book.objects.all()
        paginator = Paginator(bks, 10)
        print('当前对象的总个数是:', paginator.count)
        print('当前对象的面码范围是:', paginator.page_range)
        print('总页数是:', paginator.num_pages)
        print('每页最大个数:', paginator.per_page)
    
        cur_page = request.GET.get('page', 1)  # 得到默认的当前页
        page = paginator.page(cur_page)
        return render(request, 'bookstore/book.html', locals())
    视图函数

    模板设计

    <html>
    <head>
        <title>分页显示</title>
    </head>
    <body>
    {% for b in page %}
        <div>{{ b.title }}</div>
    {% endfor %}
    
    {# 分页功能 #}
    {# 上一页功能 #}
    {% if page.has_previous %}
    <a href="{% url "book" %}?page={{ page.previous_page_number }}">上一页</a>
    {% else %}
    上一页
    {% endif %}
    
    {% for p in paginator.page_range %}
        {% if p == page.number %}
            {{ p }}
        {% else %}
            <a href="{% url "book" %}?page={{ p }}">{{ p }}</a>
        {% endif %}
    {% endfor %}
    
    {#下一页功能#}
    {% if page.has_next %}
    <a href="{% url "book" %}?page={{ page.next_page_number }}">上一页</a>
    {% else %}
    上一页
    {% endif %}
    总页数: {{ page.len }}
    </body>
    </html>
    模板设计
  • 相关阅读:
    题解 P1003 【铺地毯】
    题解 P1000 【超级玛丽游戏】
    题解 P1036 【选数】
    题解 P1217 【[USACO1.5]回文质数 Prime Palindromes】
    题解 AT934 【完全数】
    题解 P2044 【[NOI2012]随机数生成器】
    题解 P4277 【河城荷取的烟花】
    System.Linq.Dynamic.Core
    008 TBS Studio 真机开发辅助工具的简单说明
    webpack
  • 原文地址:https://www.cnblogs.com/maplethefox/p/11235418.html
Copyright © 2011-2022 走看看