django Paginator分页构造器的使用

本文详细介绍了如何在Django中使用Paginator类进行分页,包括Paginator对象的构造、获取指定页面以及处理异常。作者还提到了如何封装返回类以处理成功与失败的响应情况。
摘要由CSDN通过智能技术生成

django Paginator分页构造器的使用

首先导入Paginator类

from django.core.paginator import Paginator

然后构造分页器对象

    articles = Article.objects.all()
    paginator = Paginator(articles, per_page=page_size)

获取指定页面

paginator.page(number)
paginator.get_page(number)

page(number)

获取指定页面的内容,此方法会验证number的类型和数值范围,如果不符合要求会直接抛出异常,所以使用此方法一定要做异常的处理

get_page(number)

此方法也是获取指定页面内容,但是不同的是,此方法已经做了异常的处理,如果传入的参数不是数值类型,会直接返回第一页,如果数值超过了分页的范围,会返回最后一页

查看源码
    def get\_page(self, number):
        """
 Return a valid page, even if the page argument isn't a number or isn't
 in range.
 """
        try:
            number = self.validate_number(number)
        except PageNotAnInteger:
            number = 1
        except EmptyPage:
            number = self.num_pages
        return self.page(number)

    def page(self, number):
        """Return a Page object for the given 1-based page number."""
        number = self.validate_number(number)
        bottom = (number - 1) \* self.per_page
        top = bottom + self.per_page
        if top + self.orphans >= self.count:
            top = self.count
        return self._get_page(self.object_list[bottom:top], number, self)

获取数据

使用pageget_page得到的page对象是一个可迭代对象,直接从page中迭代得到我们的模型对象,然后按照操作模型的方法处理即可,我这里是给模型定义了to_dict()方法

    data = []
    for article in page:
        data.append(article.to_dict())

完整代码

"""
公共返回类,使用静态方法封装成功与失败的响应
"""
class Response:

    @staticmethod
    def success(data: object = None,msg: str = '') -> JsonResponse:
        res_dic = {
            "code": 1,
            "msg": msg
        }
        if data:
 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/e9f271e140592759321437726b9939fe.png)

![img](https://img-blog.csdnimg.cn/img_convert/a9ffc1c0315ab2e717a45cd18edd3bb7.png)

![img](https://img-blog.csdnimg.cn/img_convert/4268094a95ca5f10b83f6b7b047f7bef.png)

![img](https://img-blog.csdnimg.cn/img_convert/f6b9790af8933822c944dfa4ff4d0d17.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

![](https://img-blog.csdnimg.cn/img_convert/efddc3448787a69949e75f018d4c43c0.jpeg)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值