首页 > 其他 > 详细

Django——分页功能Paginator

时间:2019-06-20 10:48:30      阅读:116      评论:0      收藏:0      [点我收藏+]

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 %}

 

Django——分页功能Paginator

原文:https://www.cnblogs.com/pywjh/p/11056737.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!