1

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

clipboard.png
代码程序:

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

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


二十一
1.4k 声望867 粉丝

无论遇到多大的困难,你总是能扛过去,坚持一件事,对自己