zoukankan      html  css  js  c++  java
  • django分页功能 views与templates

    分页

    • Django提供了数据分页的类,这些类被定义在django/core/paginator.py中
    • 对象Paginator用于对列进行一页n条数据的分页运算
    • 对象Page用于表示第m页的数据

    Paginator对象

    • 方法init(列表,int):返回分页对象,参数为列表数据,每面数据的条数
    • 属性count:返回对象总数
    • 属性num_pages:返回页面总数
    • 属性page_range:返回页码列表,从1开始,例如[1, 2, 3, 4]
    • 方法page(m):返回Page对象,表示第m页的数据,下标以1开始

    Page对象

    • 调用Paginator对象的page()方法返回Page对象,不需要手动构造
    • 属性object_list:返回当前页对象的列表
    • 属性number:返回当前是第几页,从1开始
    • 属性paginator:当前页对应的Paginator对象
    • 方法has_next():如果有下一页返回True
    • 方法has_previous():如果有上一页返回True
    • 方法len():返回当前页面对象的个数
    • 迭代页面对象:访问当前页面中的每个对象

    #视图

    from django.core.paginator import Paginator

    def page(request):
    # GET 获取 模板 <a href="?index=1">首页</a> 的index=的value
    p_index = request.GET.get('index',1)
    # print(type(p_index)) # 获取的数据类型<class 'str'>
    # 查询地区表,过滤没有父级元素的省份
    province = AreaInfo.objects.filter(aParent__isnull=True)

    # 创建对象paginator对象,将 province分页,每页3个数据
    paginator = Paginator(province,3)

    # 获取总页数
    total_pages = paginator.num_pages

    # 判断如果页数输入为空, 展示第一页
    if p_index=='':
    p_index=1
    p_index = int(p_index) # 需要将str >> int 类型

    # 如果小于1,也显示第一页
    if p_index <1:
    p_index=1

    # 如果大于总页数,则显示最后一页
    if p_index > total_pages:
    p_index=total_pages

    # 获取 页
    p = paginator.page(p_index)

    # n表示当前页: n-5,n-4,n-3,n-2,n-1, n, n+1,n+2,n+3,n+4,(公式,以n为中心)
    # 将所有数据以10页 10页的显示
    # 如果页数<10, 显示的页数如下
    if total_pages <=10:
    page_list=range(1,total_pages+1)

    # 如果总页数>10,而当前页的数字小于5, 不符合公式
    elif p_index<=5:
    page_list=range(1,11)

    # 总页为19页,当前页应为15,才符合公式
    # 10 11 12 13 14 15 16 17 18 19 ,大于15的话,条件不成立,不符合公式
    elif p_index>=total_pages-4:
    page_list=range(total_pages-9,total_pages+1)

    # 其他则满足 公式即可
    else:
    page_list=range(p_index-5,p_index+5)

    return render(request,'page.html', {"p":p,'page_list':page_list})

    # 模板
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/static/js/jquery-1.12.4.min.js"></script>
    </head>
    <body>
    <ul>
    <!--显示省份信息-->
    {% for index in p %}
    <li>{{ index.title }}</li>
    {% endfor %}
    </ul>
    <!--判断是否存在上一页-->
    {% if p.has_previous %}
    <a href="?index=1">首页</a>
    <a href="?index={{ p.number|add:-1 }}">上一页</a>
    <!--没有则不显示连接提示 -->
    {% else %}
    首页&nbsp; 上一页
    {% endif %}
    <!--遍历 页码-->
    {% for index in page_list%}
    <!--如果选中当前页,则不提示链接-->
    {% if index == p.number %}
    {{ index }}
    <!--显示链接-->
    {% else %}
    <a href="?index={{ index }}">{{ index }}</a>&nbsp;&nbsp;&nbsp;
    {% endif %}
    {% endfor %}

    {% if p.has_next %}
    <a href="?index={{ p.number|add:+1 }}">下一页</a>
    <a href="?index={{ p.paginator.num_pages }}">末页</a>
    {% else %}
    末页&nbsp; 下一页
    {% endif %}
    </body>
    </html>
  • 相关阅读:
    1144 The Missing Number (20分)
    1145 Hashing
    1146 Topological Order (25分)
    1147 Heaps (30分)
    1148 Werewolf
    1149 Dangerous Goods Packaging (25分)
    TypeReference
    Supervisor安装与配置()二
    谷粒商城ES调用(十九)
    Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected
  • 原文地址:https://www.cnblogs.com/yuanzhengchi/p/8707352.html
Copyright © 2011-2022 走看看