Django-分页

Paginator对象

  • 创建对象
    • Paginator(数据集合, int)
    • 返回分页对象,参数1为要分页的数据集合,参数2为每页有几条数据
  • 属性:
    • count:对象总数
    • num_pages:页码数
    • page_range:页码列表,从1开始
  • 方法:page(num)
    • num是页码,从1开始。会创建一个page对象,该对象存储当前页码的数据,如果页码不存在会抛出InvalidPage异常
  • 异常:
    • InvalidPage:当向page()传递一个无效的页码时抛出
    • PageNotAnInteger:当向page()传递一个不是整数的值时抛出
    • EmptyPage:当向page()提供了一个有效值,但是那个页码上没有任何的对象时抛出

Page对象

  • **创建对象:**Paginator对象的page()方法返回Page对象,不需要手动构建
  • 属性:
    • object_list:当前页上的所有对象列表
    • number:当前页的页码,从1开始
    • paginator
      • 当前page对象的相关的Paginator对象
      • 注意:一个paginator对象使用page()函数创建了一个page对象,该page对象中有一个paginator属性,该属性引用了创建该page对象的那个paginator对象
  • 方法:
    • has_next():如果有下一页返回True
    • has_previous():如果有上一页返回True
    • has_other_pages():如果有上一页或者下一页返回True
    • next_page_number():返回下一页的页码,如果下一页不存在抛出InvalidPage异常
    • previous_page_number():返回上一页的页码,如果上一页不存在抛出InvalidPage异常
    • len():返回上一页的页码,如果上一页不存在抛出InvalidPage异常

示例

  • 视图:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from django.core.paginator import Paginator


    def students(request, num):
    allStus = Student.objects.all()
    # 每页分6条数据
    paginator = Paginator(allStus, 6)
    stus = paginator.page(num)
    print(stus)
    print(type(stus))
    print(stus.object_list)
    print(type(stus.object_list))

    return render(request, "myApp/students.html", {"stus": stus})
  • 模板:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>学生信息</title>
    </head>
    <body>
    <ul>
    {% for stu in stus %}
    <li>{{ stu.name }}--{{ stu.grade }}--{{ stu.age }}</li>
    {% endfor %}
    </ul>

    {% if stus.has_previous %}
    <a href="/students/{{ stus.previous_page_number }}/">上一页</a>
    {% endif %}

    {% for index in stus.paginator.page_range %}
    {% if index == stus.number %}
    {{ index }}
    {% else %}
    <a href="/students/{{ index }}/">{{ index }}</a>
    {% endif %}
    {% endfor %}

    {% if stus.has_next %}
    <a href="/students/{{ stus.next_page_number }}/">下一页</a>
    {% endif %}
    </body>
    </html>
  • url:

    1
    2
    3
    4
    urlpatterns = [
    url(r'^$', views.index),
    url(r'^students/(\d+)/$', views.students),
    ]

paginator对象与page对象的关系

关系

本文结束 感谢您的阅读
正在加载今日诗词....