zoukankan      html  css  js  c++  java
  • Django——分页功能Paginator

    Django分页功能----Paginator

    Paginator所需参数:

    Paginator(object_list,per_page)

    Paginator常用属性:

    per_page: 每页显示条目数量
    count:  数据总个数
    num_pages: 总页数
    page_range: 总页数的索引范围,页码的范围,从1开始

    Paginator对象的方法:

    page(number) :返回在提供的下标处的Page对象,下标以1开始。

    常见错误

    PageNotAnInteger:page()传递的不是整数
    EmptyPage:page()传递的值有效,但是没有数据

    page对象属性:

    Page.object_list: 当前页上所有对象的列表
    Page.number: 当前页的序号,从1开始
    Page.paginator: 相关的Paginator对象

    page对象方法:

    has_next():判断是否有下一页
    has_previous():判断是否有上一页
    has_other_pages():判断是否有上一页或下一页
    next_page_number():返回下一页的页码
    previous_page_number():返回上一页的页码
    start_index(): 返回当前页的第一个对象的索引
    end_index(): 返回当前页的最后一个对象的索引

    基本方法:

    from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage
    ​
    def page_test(request):
        color = ['red','orange','yellow','green','blue','purper']
        p = Paginator(color,2)  # 实例化分类对象 
        print(p)
        print(p.per_page)   # 每页显示的数目
        print(p.count)   # 总的对象数
        print(p.num_pages)  # 分的页面数
        print(p.page_range)  # 页码的范围,从1开始
    ​
        page1 = p.page(1)    # 第一页分页对象
        page2 = p.page(2)    # 第二页分页对象
        print(page1.object_list)   # 第一页元素列表
        print(page2.object_list)   # 第二页元素列表
        print(page1.number)  # 当前页值 1
        print(page2.number)  # 当前页值 2
        print(page1.paginator)   # Paginator指的就是p
    print(page1.has_next())      # 当前页是否有后一页
        print(page1.has_previous())   # 当前页是否有前一页
        print(page1.has_other_pages())  # 当前页是否有前一页或后一页
    print(page1.next_page_number()) # 下一页的页码
        print(page2.previous_page_number()) # 上一页的页码
    print(page1.start_index())  # 当前页的第一个对象的索引
        print(page2.end_index())  # 当前页的最后一个对象的索引
    return HttpResponse('XXXXX')

    blogs博客列表中的应用

    view.py视图函数中:

    def list(request):
        blog_list = BlogModel.objects.all().order_by('id')
        p = Paginator(blog_list,3)
        page = request.GET.get('page')
        blogs = p.page(page)
        # 1(第一种方式)
        try:
            blogs = p.page(page)
        except PageNotAnInteger:
            blogs = p.page(1)
        except EmptyPage:
            blogs = p.page(p.num_pages)
        # blogs = p.get_page(page)  # 2(第二种方式,封装好的方法)
        return render(request,'blog/demo_list.html',
                      context={'page':blogs})

    blog_list.html 博客列表模板中:

    {% if page.has_previous %}
         <a href="{% url 'blog_list' %}?page={{page.previous_page_number}}">上一页</a>
    {% endif %}
    {#  {{ page.number }}/{{ page.paginator.num_pages }}#}
    {% for num in page.paginator.page_range %}
        {% if num == page.number %}
            <a href="{% url 'blog_list' %}?page={{ num }}" style="font-size: 33px">{{ num }}</a>
        {% else %}
            <a href="{% url 'blog_list' %}?page={{ num }}" >{{ num }}</a>
        {% endif %}
    {% endfor %}
    {% if page.has_next %}
        <a href="{% url 'blog_list' %}?page= {{ page.next_page_number }}">下一页</a>
    {% endif %}
  • 相关阅读:
    玉米不怕累,宇春最珍贵
    幸福
    谷歌位置搜索 蹩脚结合jquery.ui.gmap
    Resharp Format XML config
    正则表达取得 image src 中值
    一个Gif处理的类库
    使用nuGet管理自己的包
    正则表达式语言 快速参考
    动态加入JS及加入CSS
    检测是一个时间串或一个数字串是否连续
  • 原文地址:https://www.cnblogs.com/pywjh/p/11056737.html
Copyright © 2011-2022 走看看