首先在view函数里面引入所需要的分页函数
from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage
def index(request):
1.获取所有数据
persons=Person.objects.all()
2.根据数据创建分页器对象
#参数1 查询出来所有数据
# 参数2 每一页显示的个数
#参数3 如果最后一页的数据个数小于3 将其合并到上一页中
pagenator=Paginator(persons,10,3)
3.取出当前展示的页码
#没有传递页码参数默认获取第一页
page_num=request.GET.get('page','1')
try:
4,根据页码从分页器中取出对应页的数据
page=pagenator.page(page_num)
except PageNotAnInteger as e:
#如果获取的页码不是整数,默认返回第一页数据
page=pagenator.page(1)
except EmptyPage as e:
#当参数页码大于或小于页码范围值,会触发一个异常
#分为两种情况
#1.大于
if int(page_num)>pagenator.num_pages:
page=pagenator.page(pagenator.num_pages)
else:
#2.小于 获取第一页数据
page=pagenator.page(1)
num=int(page_num)
#如果num是1 显示1—10
#如果num是2 显示2-11
#如果num是3 显示3-12
#如果num是4 显示4-13
#如果num是5 显示5-14
#如果num是6 显示6-15
#如果num是7 显示7-16
#如果num是8显示8-17
#如果num是9 显示9-18
#如果num是10显示10-19
# 如果num是11显示11-20
# 如果num是12 显示11-20
#如果num是15 显示11-20
#如果num<11 范围是num-num+9
#如果num>=11 范围是
#1.
link_range=[]
if num<11 or num+9<=pagenator.num_pages:
link_range=range(num,num+10)
else:
link_range=range(pagenator.num_pages-9,pagenator.num_pages+1)
return render(request,'index.html',{'page':page,'pagenator':pagenator,'link_range':link_range})