拓展——分页功能的实现上一文中实现了一个简易版的博客小案例,但是后面有粉丝私信我说博客列表页如果数据多的话很不好看,问我能不能做个分页!
话不多说——安排~
(1)简单讲解: 第一部分(导入&&实例化分页对象&&分页对象常用方法)Django提供了一个新的类来帮助你管理分页数据,这个类存放在django/core/paginator.py.它可以接收列表、元组或其它可迭代的对象。
# 导入 from django.core.paginator import Paginator # 模拟数据库中数据 li = ["数据一", "数据二", "数据三", "数据四", "数据五", "数据六", "数据七"] # 实例化分页对象:3条数据为一页 paginator = Paginator(li, 3) print(paginator) # 分页对象的常用方法: print(paginator.count) # 分页对象总共含有元素个数 print(paginator.num_pages) # 返回分页之后的总页数 print(paginator.page_range) # 分页对象的可迭代范围 print(paginator.object_list) # 分页对象的数据查询集(一个元素列表的形式)第二部分(实例化第n页对象&&第n页对象常用方法)
# 实例化第n页对象 page = paginator.page(1) # 获取分页对象的第一页对象 print(page) page2 = paginator.page(2) # 第n页的实例对象常用方法: print(page.object_list) # 当前页的数据查询集(一个元素列表的形式) print(page.number) # 第n页对象的页码值 print(page.has_previous()) # 第一页对象是否有前一页 print(page.has_other_pages())# 第一页对象是否有其他页 print(page.has_next()) # 第一页对象是否有下一页 print(page.next_page_number())# 第一页对象的下一页页码值 print(page2.previous_page_number()) # 第二页对象的上一页页码值 print(page.start_index()) # 第一页对象含有数据元素的开始索引值 print(page.end_index()) # 第一页对象含有数据元素的结束索引值第三部分(如何通过第n页对象获取其分页对象)
分页的实例对象paginator和第n页的实例对象page二者很多方法不互通。
那么有个问题就是——如果你当前操作的是第n页的实例对象page,但是需要使用分页的实例对象paginator的一些方法,该怎么办呢?
上面我们知道分页的实例对象paginator长如下模样:
第n页的实例对象长如下模样:
range(1, 4)
我们只需进行如下操作即可:
paginator = Paginator(li, 3) page = paginator.page(1) print(page.paginator)(2)使用: ①视图函数的修改: ②对应路由的修改: ③前端页面的修改: 小注意:所有对于博客列表页的跳转都要相应修改哦~
以修改首页中的博客列表页的跳转为例(别的坑自己填哦!):
点击下一页:



