Flask分页iter_pages之None分析

39次阅读

共计 829 个字符,预计需要花费 3 分钟才能阅读完成。

昨天看一了下问答区的问题,很多人都咨询了 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 7 8 9
这样就完美解决了。当然以上促使以上三个任意条件永远成立都可以进行完整遍历。

正文完
 0