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>
  • 相关阅读:
    sql server 数据库创建链接服务器
    RabbitMQ消息队列(十四)-启用SSL安全通讯
    RabbitMQ消息队列(十三)-VirtualHost与权限管理
    RabbitMQ消息队列(十二)-性能测试
    RabbitMQ消息队列(十一)-如何实现高可用
    RabbitMQ消息队列(十)-高可用集群部署实战
    centos7 修改yum源为阿里源
    RabbitMQ消息队列(九)-通过Headers模式分发消息(.Net Core版)
    RabbitMQ消息队列(八)-通过Topic主题模式分发消息(.Net Core版)
    RabbitMQ消息队列(七)-通过fanout模式将消息推送到多个Queue中(.Net Core版)
  • 原文地址:https://www.cnblogs.com/yuanzhengchi/p/8707352.html
Copyright © 2011-2022 走看看