• Django分页解析


    分页

    django中实现管理数据分页的类位于 django.core.paginator.py

    Paginator

    对列表数据进行分页处理

    对象

    Paginator(Post.objects.all(),3)

    Paginator(列表,int) 返回分页对象,专门处理分页(list集合,每页的数量)

    属性

      count     num_pages    page_range

    paginator.count 所有页面的对象总数

    paginator.num_pages 页面总数

    paginator.page_range  页码列表

    方法

        page(num):下标以1开始的下标对象,如果提供的页码不存在,抛出InvalidPage异常

    异常exception

        InvalidPage:当向page()传入一个无效的页码时抛出

        PageNotAnInteger:当向page()传入一个不是整数的值时抛出

    EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出

    Page对象

    Paginator 对象的page() 方法返回Page对象

    page = pageinator(1) 返回指定页

    属性

    page . object_list 获得当前页所有的数据+=对象的列表

         Page . number 当前页的序号,从1 开始

         Page. paginator  当前页page相关的Paginator对象

    方法

    has_next():如果有下一页返回True

    has_previous():如果有上一页返回True

    has_other_pages():如果有上一页或下一页返回True

    next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常

    previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常

    Page.start_index()[source]返回当前页上的第一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将五个对象的列表分为每页两个对象,第二页的start_index()会返回3

    Page.end_index()[source]返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将五个对象的列表分为每页两个对象,第二页的end_index() 会返回 4

    len():返回当前页面对象的个数

    迭代页面对象:访问当前页面中的每个对象

    案例

    method 最多显示5 页

    @staticmethod
        def get_posts_by_page(num,per_page=1):
            num = int(num)
            pagintor = Paginator(Post.objects.order_by('-modified').all(),per_page)
            if num <1:
                num =1
            if num > pagintor.num_pages:
                num =pagintor.num_pages
            page = pagintor.page(num)
    
            # 最多显示5页
            # range =[ )
            pervious= 2
            last = 2
            #如果当前页为 1 或2 时范围
            if num <=pervious:
                start = 1
                end = pervious+last+1
            # 如果当前页大于2 范围
            #例如当前页 为 8 时 start=6 end = 10
            if num > pervious:
                start = num- pervious
                end = num+last
            #当最后一样超过总页数时
            # 例如当前页 为 8 时 start=6 end = 10 但是 只有9页
            if end > pagintor.num_pages:
                min = end - pagintor.num_pages
                end = pagintor.num_pages
                start -= min
            return (page,range(start,end+1))

    页面渲染

    def index_view(request,num = '1'):
        page,page_range=Post.get_posts_by_page(num)
        return render(request,'index.html',context={'page':page,'page_range':page_range})

    html中页面显示

    {% if page.has_previous %}
                 <a class="extend prev" rel="next" href="/page/{{ page.previous_page_number }}">« Prev</a>
                {% endif %}
                  {% for p in page_range %}
                  {% if p == page.number %}
                  <span class="page-number current">{{ p }}</span>
                  {% else  %}
                      <a class="page-number" href="/page/{{ p }}">{{ p }}</a>
                  {% endif %}
                  {% endfor %}
                {% if page.has_next %}
                <a class="extend next" rel="next" href="/page/{{ page.next_page_number }}">Next »</a>
                {% endif %}
  • 相关阅读:
    Linux下Apache服务器并发优化
    centos 7 mount win共享文件夹 开机自动挂载
    自学 phpredis 的心路历程
    VM虚拟机下centos7 无法上网的问题解决办法
    php headers_sent 函数的作用
    is_file 与 file_exists 的区别
    php 面向对象 中的self
    php 去除所有空格 包括中文空格圆角空格
    滑动窗口滚动条触发事件
    PHP中file_exists与is_file、is_dir的区别,以及执行效率的比较 转自#冰雪傲骨#
  • 原文地址:https://www.cnblogs.com/yumo1627129/p/7966479.html
Copyright © 2020-2023  润新知