您的位置:首页 > 编程语言 > Python开发

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

2014-11-19 22:31 691 查看
在路上~

每当用到表格展现数据时,都回遇到表格数据量过大而展示不佳的情况,这时候,分页工具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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: