django分页器
在搭建一个博客的时候,假设我们先写好几篇博客保存。刷新页面后我们就会看到这几篇博客。
但是如果有非常多的博客的话,我们需要一直往下拉才能看到剩下的博客,这样其实不太好。
所以在搭建博客的时候,django提供了一个分页器,叫paginator。
我们在在代码中导入
from django.core.paginator import Paginator
显然Paginator是一个类,所以我们可以通过
paginator = Paginator(object_list,page_number)来创建一个分页器,下面解释两个参数
object_list:这个是所有博客的数量
page_num:这个是你想分成一页多少篇博客,假设object_list=30,page_num=10,那么paginator就是一个包含了三个页面的对象,每个页面有10篇博客。
看到page_num = request.GET.get('page',1)
这句代码是用来获取我们的网址链接上的参数page的值,如果是非法值比如a,b,c这些,那么则默认参数为1.
再看page_of_blogs = paginator.get_page(page_num)
page_num = request.GET.get('page',1)首先获取页码,
page_of_blogs = paginator.get_page(page_num)再获取页码对应的十篇博客。
看到这里可能会想这个跟在page_of_blogs后面的paginator.count和obeject_list是什么。
我们先通过python manage.py shell进入django相关的编程环境,并输入以下代码。
from blog.models import Blog
from django.core.paginator import Paginator
blogs_all_list = Blog.objects.all() #这里只要知道是获取所有的博客就行了
paginator = Paginator(blogs_all_list,10) #将所有博客进行分页,分成一页10篇博客
page_of_blogs = paginator.get_page(1) #获取第一页的所有博客
好了,接下来的这一步就是关键,我们先输入dir(page_of_blogs),回车看看结果(图里的dir(page_of_list是我打错了,请不要介意。))
我们看到这个列表的倒数第三和第四个,分别是paginator和object_list,所以我们很清楚的知道这是page_of_blogs自带的一些方法。
我们在看看dir(paginator)
看到倒数第二行的倒数第三个有个count
综上,所以page_of_blogs.paginator.count就是这一页对应的分页器它包含的所有博客的数量
page_of_blogs.object_list就是这一页博客所包含的博客数量,也就是10篇