python第三方库系列之四--django自带分页工具Paginator

在路上~

每当用到表格展现数据时,都回遇到表格数据量过大而展示不佳的情况,这时候,分页工具Paginator从天而降(也废了工程师们些力气)。

一、分页工具Paginator的引入

from django.core.paginator import PageNotAnInteger, Paginator, InvalidPage, EmptyPage

二、如何分页

from django.core.paginator import PageNotAnInteger, Paginator, InvalidPage, EmptyPage

def  list(request):
    books = Book.objects.all() #之前需要从models中导入Book
    after_range_num = 5        #当前页前显示5页
    befor_range_num = 4       #当前页后显示4页
    try:                     #如果请求的页码少于1或者类型错误,则跳转到第1页
        page = int(request.GET.get("page",1))
        if page < 1:
            page = 1
    except ValueError:
        page = 1
    paginator = Paginator(books,2)   # 设置books在每页显示的数量,这里为2
    try:                     #跳转到请求页面,如果该页不存在或者超过则跳转到尾页
        books_list = paginator.page(page)
    except(EmptyPage,InvalidPage,PageNotAnInteger):
        books_list = paginator.page(paginator.num_pages)
    if page >= after_range_num:
        page_range = paginator.page_range[page-after_range_num:page+befor_range_num]
    else:
        page_range = paginator.page_range[0:int(page)+befor_range_num]
    return render-to_response('book_list.html',{'books':books_list,'page_range':page_range})

三、返回给前端如何展示(即template视图)

{% for book in books.object_list %}
{{ book.id }}  |   {{ book.name }} <br />
{% endfor %}
<div>
{% if books.has_previous %}
<a href="?page={{ books.previous_page_number }}">< 上一页</a>
{% endif %}
<span>
{% for p in page_range %}
{% ifequal p books.number %}
<span class="current">{{p}}</span>
{% else %}
<a href="?page={{p}}" title="第{{p}}页">{{p}}</a>
{% endifequal %}
{% endfor %}
</span>
{% if books.has_next %}
<a href="?page={{ books.next_page_number }}">下一页 > </a>
{% endif %}
<a >[第{{ books.number }}/{{ books.paginator.num_pages }}页]</a>
</div>

四、各种相关熟悉以及相关方法

1. 各种相关的属性:

  总页数:paginator.num_pages

  总记录数: paginator.count

  页的范围: paginator.page_range, 比如 [1, 2, 3, 4]

  页数据(list): page.object_list 

  当前页码: page.number、

2. 相关的方法:

  是否有下页:page.has_next(), True/False

  是否有上页:page.has_previous()

  下一页的页码:page.next_page_number()

  上一页的页码:page.previous_page_number()

  当前页第一个对象: page.start_index()

  当前页最后一个对象: page.end_index()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值