Loading

23.-分页

一、分页的定义
分页是指在web页面上有大量数据今昔显示,为了阅读方便在每个页面中只显示部分数据
优点:
1.方面阅读
2.减少数据提取量,减轻服务器压力
 
Django提供了Paginator类可以方便的实现分页功能
Paginator类位于django.core.pagintor模块中
from django.core.paginator import Paginator
 
二、Paginotor对象
负责分页数据整体的管理
# 对象的构造方法
pagintor = Pagintor(object_list,per_page)

object_list: 需要分类的数据的对象列表

per_page:每页数据个数

返回值:Paginator对象
#Paginator属性
count:需要分页数据的对象总数
num_pages:分页后的页面总数
page_range:从1开始的range对象,用于记录页码数
per_page:每页数据的个数
#Paginator方法
pagintor对象.page(number)
        参数number为页码信息(从1开始)
        返回当前number页对应的页面信息
        如果提供的页码不存在,抛出InvalidPage异常

 

 
三、page对象
 
负责具体某一页的数据的管理
创建对象
# Paginator对象的page()方法返回page对象

page = paginator.page(页码)

page对象属性
    objcet_list:当前页上所有数据的对象列表
    number:当前页的序号,从1开始
    paginator:当前page对象相关的Paginator对象
    
page对象方法
    has_next() #如果有下一页 返回True
    has_previous() #如果有上一页,返回True
    has_other_pages() #如果有上一页或下一页 返回True
    next_page_number() #返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
    previous_page_number() #返回上一页的页码,如果上一页不存在,抛出InvalidPage异常
Paginotor掌控全局,page掌控局部

四、具体示例:
视图
from django.core.paginator import Paginator


def test_page(request):
    # 全部数据如下
    all_data = ['a', 'b', 'c', 'd', 'e']
    # 获取页码
    page_num = request.GET.get('page', 1)

    # 初始化pagintor 要分页的数据 / 每页显示的数量
    pagintor = Paginator(all_data, 2, )

    # 初始化 具体页码的page对象
    c_page = pagintor.page(int(page_num))
    return render(request, 'test.html', locals())

 

模版
body>

{# 循环页码 #}
{% for p in c_page %}
    <p>{{ p }}</p>
{% endfor %}


{# 判断如果有上一页,显示跳转,否则显示置灰文本 #}
{% if c_page.has_previous %}
    {# 拼接上一页页码参数 #}
    <a href="/test_page?page={{ c_page.previous_page_number }}">上一页</a>
{% else %}
    上一页
{% endif %}

{#  循环页码#}
{% for p_num in pagintor.page_range %}
    {# 如果页码与 当前序号一致#}
    {% if p_num == c_page.number %}
        {{ p_num }} {# 当前页码置灰显示 #}
    {% else %}
        <a href="/test_page?page={{ p_num }}">{{ p_num }}</a> {# 显示高亮序号跳转 #}
    {% endif %}
{% endfor %}

{# 判断如果有下一页,显示跳转,否则显示置灰文本 #}
{% if c_page.has_next %}
    <a href="/test_page?page={{ c_page.next_page_number }}">下一页</a>
{% else %}
    下一页
{% endif %}
</body>

 

posted @ 2022-01-12 12:33  木子七  阅读(79)  评论(0编辑  收藏  举报