django分页

转自:http://blog.csdn.net/jianhong1990/article/details/7382856


django提供了一些类来协助我们分页。对应的文件为django/core/paginator.py

1.简单用法

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> from django.core.paginator import Paginator  
  2. >>> objects = ['john''paul''george''ringo']  
  3. >>> p = Paginator(objects, 2)  
  4. >>> p.count  
  5. 4  
  6. >>> p.num_pages  
  7. 2  
  8. >>> p.page_range  
  9. [12]  
  10. >>> page1 = p.page(1)  
  11. >>> page1  
  12. <Page 1 of 2>  
  13. >>> page1.object_list  
  14. ['john''paul']  
  15. >>> page2 = p.page(2)  
  16. >>> page2.object_list  
  17. ['george''ringo']  
  18. >>> page2.has_next()  
  19. False  
  20. >>> page2.has_previous()  
  21. True  
  22. >>> page2.has_other_pages()  
  23. True  
  24. >>> page2.next_page_number()  
  25. 3  
  26. >>> page2.previous_page_number()  
  27. 1  
  28. >>> page2.start_index() # The 1-based index of the first item on this page  
  29. 3  
  30. >>> page2.end_index() # The 1-based index of the last item on this page  
  31. 4  
  32. >>> p.page(0)  
  33. ...  
  34. EmptyPage: That page number is less than 1  
  35. >>> p.page(3)  
  36. ...  
  37. EmptyPage: That page contains no results  
  38. Note  

2.Paginator类

带两个构造参数,一个就是数据的集合,另一个表示每页放几个数据

1)构造函数:

[python] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)  

必传参数

  • object_list
    一个list,tuple,django的QuerySet,或者拥有``count()``或``__len__()``方法的 可分解对象。
    per_page
    每一页最大的对象个数。

可选参数

  • orphans
    最后一页对象的最少数目,默认为0。 如果想避免最后一页显示太少。则可以使用这个值。 那么最后一页的数据,自动被前移一页。比如总共23个数据。每页显示 10. orphans=3 那么,第一页为10,第二页为13.
    allow_empty_first_page
    表示首页是否可以为空,如果是 False 而且``object_list`` 为空,那么会触发 EmptyPage 异常。

2)方法

Paginator.page(number)

根据索引number,返回一个’Page’对象,如果不存在,引起 InvalidPage异常

3)属性

Paginator.count

所有对象的总数, 尝试通过``object_list.count()``和``object_list.__len__()`` 取得

Paginator.num_pages

总共的页数

Paginator.page_range

页的范围,比如 [1, 2, 3, 4]

InvalidPage 异常

当页面不存在或者无效时,会引起``InvalidPage``异常,一般这个异常就够用,如果需要更 详细信息,还有``PageNotAnInteger``,``EmptyPage``可用:

    PageNotAnInteger
page() 的参数非整数。
    EmptyPage
page(x) ,第x页没数据。

      上述两个都是 InvalidPage 的子类。 用一个简单的 except InvalidPage 就可以处理。

3.Page 类

1)构造函数

Page(object_list, number, paginator):

一般不需用户自己构造,通过`Paginator.page` 生成。

2)方法

Page.has_next()

如果下一页存在,返回True。

Page.has_previous()

如果前一页存在返回 True

Page.has_other_pages()

如果上一页面或者下一页存在,返回``True``

Page.next_page_number()

返回下一页的索引,这个函数比较傻(不管下一页是否存在,都是简单的+1)

Page.previous_page_number()

返回上一页的索引,其他同上

Page.start_index()

返回当前页,第一个对象的索引。

Page.end_index()

道理同上。

3)属性

Page.object_list

当前页对象列表

Page.number

当前页的索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值