资讯专栏INFORMATION COLUMN

Flask分页iter_pages之None分析

Honwhy / 2900人阅读

摘要:当然以上促使以上三个任意条件中任意一个永远成立都可以进行完整遍历,当然还有其他遍历的方式,大家可以脑洞想想。

昨天看一了下问答区的问题,很多人都咨询了flask在分页的时候总是会遍历出None,这是怎么回事呢?先来一段小程序:
数据库信息:


代码程序:

if __name__ == "__main__":
    user=User.query.paginate(1,2)
    for i in user.iter_pages():
        print(i,end="   ")
        
输出信息:1   2   3   4   5   None   8   9 

今天我自己看了一下源码,来分析一下

def iter_pages(self, left_edge=2, left_current=2,
                   right_current=5, right_edge=2):
    last = 0
    for num in xrange(1, self.pages + 1):
        if num <= left_edge or 
           (num > self.page - left_current - 1 and 
            num < self.page + right_current) or 
           num > self.pages - right_edge:
            if last + 1 != num:
                yield None
            yield num
            last = num

可以很明了的看到当last+1 != num的时候就会返回None,那么接下来的问题就是如果可以使
last+1 != num,那就是当
num <= left_edge or
(num > self.page - left_current - 1 and num < self.page + right_current) or
num > self.pages - right_edge不成立的时候,
下次循环就会使last+1 != num。
那么,我们如何结果很多人想要完整遍历的目的呢?那就是在默认参数总改变值,使上述的三个条件中任意一个永远成立,如使num <= left_edge永远成立

for i in user.iter_pages(left_edge=user.pages):
    print(i,end="   ")
    
输出结果:1   2   3   4   5   6    7    8   9

这样就完美解决了。当然以上促使以上三个任意条件中任意一个永远成立都可以进行完整遍历,当然还有其他遍历的方式,大家可以脑洞想想。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42929.html

相关文章

  • python实战----Todo清单续写

    摘要:创建时间登录用户登录地点外键确保你有一个关于数据库迁移的文件,基础代码如下在终端执行命令添加日志信息第二步,给路由和对应视图函数加上采集的日志信息以添加清单任务为例修改状态和删除任务也加上日志信息,这里省略西安添加任务 添加分页功能 第一步:是对视图函数的改写,通过查询数据库数据,进行分页显示 # 修改清单显示的视图函数 @app.route(/list/) @app.route(/l...

    DC_er 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<