您的位置:首页 > 编程语言 > Go语言

Django实战(20):分页(Pagination)

2012-02-09 20:33 218 查看
在上一节我们实现了针对某个产品的订单订阅功能。但是我们可能需要直接在站点上查询所有的订单。显然,随着时间的增长订单会越来越多,所以分页(Pagination)是个好办法:每次只显示一部分订单。

分页是Web应用常用的手法,Django提供了一个分页器类Paginator(django.core.paginator.Paginator),可以很容易的实现分页的功能。该类有两个构造参数,一个是数据的集合,另一个是每页放多少条数据。Paginator的基本使用如下:

$python manage.py shell

>>> from django.core.paginator import Paginator

>>> objects = ['john', 'paul', 'george', 'ringo']

>>> p = Paginator(objects, 2) #每页两条数据的一个分页器

>>> p.count #数据总数

4

>>> p.num_pages #总页数

2

>>>p.page_range #页码的列表

[1, 2]

>>> page1 = p.page(1) #第1页

>>> page1

<Page 1 of 2>

>>> page1.object_list #第1页的数据

['john', 'paul']

>>> page2 = p.page(2)

>>> page2.object_list #第2页的数据

['george', 'ringo']

>>> page2.has_next() #是否有后一页

False

>>> page2.has_previous() #是否有前一页

True

>>> page2.has_other_pages() #是否有其他页

True

>>> page2.next_page_number() #后一页的页码

3

>>> page2.previous_page_number() #前一页的页码

1

>>> page2.start_index() # 本页第一条记录的序数(从1开始)

3

>>> page2.end_index() # 本页最后录一条记录的序数(从1开始)

4

>>> p.page(0) #错误的页,抛出异常

...EmptyPage: That page number is less than 1

>>> p.page(3) #错误的页,抛出异常

...EmptyPage: That page contains no results

其实前面scaffold生成的内容里面就已经包含了分页的功能,相信有了对Paginator的了解,你自己就可以看懂在view函数和模板中如何使用分页器了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: