django 分页

点击查看代码
from django.views import View
from django.forms.models import model_to_dict
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger


class Record(View):
    def get(self, request):
        query_set = GenerateRecord.objects.all().order_by('-id')
        page = request.GET.get('page')  # 获取分页数
        paginator = Paginator(query_set, 3)  # 设置一页显示多少条数据(news为要分页的数据)
        try:
            data = paginator.page(page)  # 获取当前页码的记录
        except PageNotAnInteger:
            data = paginator.page(1)  # 如果用户输入的页码不是整数时,显示第1页的内容
        except EmptyPage:
            data = paginator.page(paginator.num_pages)  # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
        ctx = [model_to_dict(instance) for instance in data]
        response = {
            'code': 0,
            'message': 'success',
            'data': {
                'page': page,
                'count': paginator.count,
                'context': ctx
            }
        }

        return JsonResponse(response, status=200)
另外 Paginator 类中有三个常用的属性,它们分别是:

count:表示所有页面的对象总数。
num_pages: 表示页面总数。
page_range: 下标从 1 开始的页数范围迭代器。

Page 对象有三个常用的属性:

object_list: 表示当前页面上所有对象的列表。
numberv: 表示当前页的序号,从 1 开始计数。
paginator: 当前 Page 对象所属的 Paginator 对象。
除此之外,Page 对象还拥有几个常用的函数:

has_next(): 判断是否还有下一页,有的话返回True。
has_previous():判断是否还有上一页,有的话返回 True。
has_other_pages():判断是否上一页或下一页,有的话返回True。
next_page_number(): 返回下一页的页码。如果下一页不存在,抛出InvalidPage 异常。
previous_page_number():返回上一页的页码。如果上一页不存在,抛出InvalidPage 异常。

posted @ 2022-03-17 15:37  一枚码农  阅读(70)  评论(0编辑  收藏  举报