前言

  • 分页是指在web页面有大量数据需要显示,为了方便阅读,在每个页面中只显示部分数据。
  • 优点:

    • 方便阅读
    • 减少数据提取量,减轻服务器压力
  • Django提供了 Paginator类 可以方便的实现分页功能

  • Paginator类 位于 django.core.paginator模块 中。

1、Paginator对象

作用:负责分页数据整体的管理
对象的构造方法:

  1. paginator = Paginator(object_list,per_page)
  2. 参数:
  3. object_list 需要分页数据的对象列表
  4. per_page 每页数据个数
  5. 返回值:
  6. Paginator 的对象

1.1、Paginator属性

  • count:需要分页数据的对象总数(总共有多少条数据)
  • num_pages:分页后的页面总数(总共分了多少页)
  • page_range:从1开始的range对象,用于记录当前页码数
  • per_page:每页数据的个数

    1.2、Paginator方法

paginator对象.page(number)

  • 参数number为页码信息(从1开始)
  • 返回当前number页对应的页信息
  • 如果提供的页码不存在,抛出 InvalidPage 异常
    • InvalidPage 总的异常基类,包含以下两个异常子类
      • PageNotAnInteger:当向 page() 传入一个不是整数的值时抛出
      • EmptyPage:当向 page() 提供一个有效值,但是那个页面上没有任何对象时抛出

        示例:

        ```python from django.core.paginator import Paginator #用于分页使用

分页练习

numbers = list(range(50)) paginator = Paginator(numbers, 10) # 每页分10个 print(paginator.num_pages) # 总共分了多少页 print(paginator.count) # 总共有多少条数据

  1. <a name="intJa"></a>
  2. # 2、Page对象
  3. <a name="ADQcV"></a>
  4. ## 定义:
  5. 负责具体某一页的数据的管理
  6. <a name="vZJ5L"></a>
  7. ## 创建对象
  8. Paginator对象的page()方法返回的 Page对象<br />**page = paginator.page(页码)**
  9. <a name="qOy26"></a>
  10. ## Page对象属性
  11. - object_list:当前页上所有数据对象的列表
  12. - number:当前页的序号,从1开始
  13. - paginator:当前page对象相关的Paginator对象
  14. - <br />
  15. - has_next():如果有下一页返回True
  16. - has_previous():如果有上一页返回True
  17. - has_other_pages():如果有上一页或下一页返回True
  18. - <br />
  19. - next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage 异常
  20. - previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage 异常
  21. <a name="EXoK8"></a>
  22. ## 示例:
  23. ```python
  24. from django.core.paginator import Paginator # 导入 Paginator类
  25. # 分页练习
  26. numbers = list(range(50))
  27. paginator = Paginator(numbers, 10)
  28. # 构造Paginator类的实例对象,创建每页分10个
  29. print(paginator.num_pages) # 总共分了多少页
  30. print(paginator.count) # 总共有多少条数据
  31. ####### Page对象属性 ##############################################################
  32. page_1 = paginator.get_page(1) # 创建Page对象
  33. print("page_1.number", page_1.number) # 当前所在的分页
  34. print(page_1.has_next()) # 有没有下一页
  35. print(page_1.paginator.num_pages) # 用当前页的对象,去获取总共多少页
  36. print(page_1.paginator.count) # 用当前页的对象,去获取总共多少条数据
  37. print(page_1.has_previous()) # 有没有上一页
  38. print(page_1.has_other_pages()) # 有没有其他页
  39. print(page_1.next_page_number()) # 下一页的页码
  40. # print(page_1.previous_page_number()) #上一页的页码
  41. print(page_1.object_list) # 这一页的数据,返回的是一个list
  42. print("第3页", page.get_page(3).object_list)
  43. print("page_1.number", page.get_page(3).number)