zoukankan      html  css  js  c++  java
  • Django2.1中的分页功能详解

    django的分页功能类将我们常用的多种方法均封装在Paginator类,根据这些方法我们均可深度定制我们的分页功能。

    首先来看看[Paginator] 类的构造方法:

    class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)

    必选参数:

    1. objects_list : 必须是列表/元组或Django所生成的QuerySet对象,或具有count()__len __()方法的其他可切片对象。
    2. per_page: 每页显示多少个数量,是一个整数

    可选参数:

    1. orphans: 默认值为零,无论最后一页剩余多少条数据,都另起一页,否则将剩余的合并到上一页,举例:假如当前分页一共11页,第11页的只有两条数据,那么我们定义orphans=2,则分页总数剩余10页,最后两条数据合并到第10页。
    2. allow_empty_first_page: 是否允许第一页为空。 如果为False同时object_list为空,则将引发EmptyPage错误,默认值为True.

    Paginator的方法,2.0版后新增:

    1. Paginator.get_page(number) 方法:返回当前页页码,并具有处理超出页码范围和无效页码的状况,页码不是数字返回第一页,超出返回最后一页。
    2. Paginator.page(number)方法: 返回指定页码的内容,如果给定的页码不存在,则引发InvalidPage。

    属性:

    1. Paginator.count: 所有页面中的对象总数。
    2. Paginator.num_pages: 分页总数
    3. Paginator.page_range: 迭代页码,返回的是一个[1,2,3,4,...]这样的列表。

    了解了上边这些之后我们既可以在模板中直接使用Page对象所提供的方法,直接使用!

    Page objects对象中的方法及属性:

    1. Page.has_next()如果有下一页返回True.
    2. Page.has_previous() 如果有上一页返回True.
    3. Page.has_other_pages() 如果同时具有上下页返回True.
    4. Page.next_page_number() 返回下一页的页码.
    5. Page.previous_page_number() 返回上一页的页码.
    6. Page.start_index() 返回当前页面的第一条数据.
    7. Page.end_index() 返回当前页的最后一条数据

    属性

    1. Page.object_list 此页上的对象列表。
    2. Page.number此页的基于 1 的页码。
    3. Page.paginator关联的 Paginator 对象。

    案例详解:

    # views.py
    
    from django.core.paginator import Paginator
    
    def list(request):
        LIST = []
        for i in range(1,102):
            LIST.append(i)
        paginator = Paginator(LIST, 10, orphans=2, )
        pages = paginator.page_range  #  生成所有页码
        pages_num = paginator.num_pages # 总也数
        gd_page = paginator.page(5)  # 调用指定页面的内容
        page = request.GET.get('page')  # 当前页面
        contacts = paginator.get_page(page)  # 当前页并具有处理超出页码范围的状况,页码不是数字返回第一页,超出返回最后一页
        return render(request, 'notes/list.html',{'contacts':contacts, 'pages':pages, 'pagenums':pages_num, 'gd_page':gd_page})
    

      

    # list.html
    
     {% for contact in contacts %}
            <li>{{ contact|upper }}</li>
        {% endfor %}
    
        <h1>分页练习</h1>
    
    {% if contacts.has_previous %}
        <li>上一页页码:{{ contacts.previous_page_number }}</li>
        <a href="?page={{ contacts.previous_page_number }}">上一页</a>
    {% endif %}
        <li>当前页码:{{ contacts.number }}</li>
    {% if contacts.has_next %}
        <li>下一页页码:{{ contacts.next_page_number }}</li>
        <a href="?page={{ contacts.next_page_number }}">下一页</a>
    {% endif %}
    
        {{ contacts.start_index }}
        {{ contacts.end_index }}
    
       <p> 所有页码:</p>
        <div class="pagetions">
    
    {% for page in pages %}
        {% if page == contacts.number %}
            <a class="active" href="?page={{ page }}">{{ page }}</a>
        {% else %}
            <a href="?page={{ page }}">{{ page }}</a>
        {% endif %}
    {% endfor %}
    
    </div>
    总页数:{{ pagenums }}
    {% for gd in gd_page %}
       <li>{{ gd }}</li>
        {% endfor %}
    给定页码:{{ gd_page }}

    创作不易,我会持续分享关于Django的相关知识,有兴趣的朋友可以关注本人微信公众号:幸福关中, 如果您觉得不错的话,打赏以下小编,小编会更有动力分享更多关于Django方面的知识,欢迎大家加小编微信交流Django知识,备注Django,小编微信:xingfuguanzhong。

  • 相关阅读:
    Redis源码解析:28集群(四)手动故障转移、从节点迁移
    Redis源码解析:27集群(三)主从复制、故障转移
    Redis源码解析:26集群(二)键的分配与迁移
    centos 6.5 安装composer
    Centos安装php高版本
    CentOS快速搭建LAMP环境
    封装类似thinkphp连贯操作数据库的Db类(简单版)。
    php封装pdo操作数据的工具类
    php中使用mysqli和pdo扩展,测试mysql数据库的执行效率。
    php中使用mysqli和pdo扩展,测试连接mysql数据库的效率。
  • 原文地址:https://www.cnblogs.com/xingfuggz/p/10253463.html
Copyright © 2011-2022 走看看