django自带模块实现翻页功能

djago自带模块实现翻页功能(前后端分离写法)


django中自带了具有翻页功能的库Paginator,下面我们一起学习一下,如何用这个库来写翻页功能

一、Page的解释

我们一般不手动创造Page这个类,而是用**Paginator.page()**来调用

1.类方法

  • Page.has_next() 如果有下一页,则返回True
  • Page.has_previous() 如果有上一页,返回 True
  • Page.has_other_pages() 如果有上一页或下一页,返回True
  • Page.next_page_number() 返回下一页的页码。如果下一页不存在,抛出InvlidPage异常。
  • Page.previous_page_number() 返回上一页的页码。如果上一页不存在,抛出InvalidPage异常。
  • Page.start_index() 返回当前页上的第一个对象,相对于分页列表的所有对象的序号,从1开始。比如,将五个对象的列表分为每页两个对象,第二页的start_index()会返回3
  • Page.end_index() 返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将五个对象的列表分为每页两个对象,第二页的end_index() 会返回 4

2.类属型

  • Page.object_list当前页上所有对象的列表。
  • Page.number当前页的序号,从1开始。
  • Page.paginator相关的Paginator对象。

二、异常处理

EmptyPage:如果查询的页面超出范围,会抛出EmptyPage这个错误

PageNotAnInteger:如果获取的页码不是整数,会抛出PageNotAnInteger这个错误

三、代码

class TurnThePage(View):
    def post(self,request):
        try:
            pag = request.POST.get('page',None)
            # defects = Defects.objects.all()
            
            defects = Defects.objects.get_queryset().order_by('id')
            #我这里是把他变成字典了,然后再放到列表里,如果不把他变成列表所传的必须是可序化,所传类型可以是列表,元组,查询集或其他
            for i in range(len(defects)):
                res_dict ={
                    'defects_id':defects[i].id,
                    'create_time':defects[i].create_time,
                    'update_time':defects[i].update_time,
                    'is_delete':defects[i].is_delete,
                    'defects_name':defects[i].defects_name,
                    'defects_status':defects[i].defects_status,
                }
                dicts_list.append(res_dict)
                
            paginator = Paginator(dicts_list,3)#每页有三条数据
            content = paginator.page(pag)#获取的页码
            content_list = content.object_list#当前页所有对象列表
            # if content.has_other_pages() == True:
            #     return JsonResponse({'status':200,'msg':'查询成功','date':content_list})
            if content.has_next() == False:#检测是否下一页
                return  JsonResponse({'status':200,'msg':'这已经是最后一页','date':content_list})
            elif content.has_previous() == False:#检测是否是第一页
                return JsonResponse({'status':200,'msg':'这已经是第一页','date':content_list})
            else:
                return JsonResponse({'status':200,'msg':'查询成功','date':content_list})
           #如果获得页码查出范围就返回第一页内容
        except EmptyPage:
            content = paginator.page(1)
            content_list = content.object_list
            return JsonResponse({'status': 200, 'msg': '你输入的页码查出范围', 'date':content_list})
        #如果获得的页码不是整数就返回第一页内容
        except PageNotAnInteger:
            content = paginator.page(1)
            content_list = content.object_list
            return JsonResponse({'status': 200, 'msg': '您输入的页码不是整数,请输入整数', 'date': content_list})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩怪怪i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值