您的位置 首页 编程资料

Django 使用Paginator实现分页操作

 首先在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})

 

 您阅读这篇文章共花了:

关于作者: YJ大表哥

热门文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注