昨天看一了下问答区的问题,不少人都咨询了flask在分页的时候老是会遍历出None,这是怎么回事呢?先来一段小程序:
数据库信息:数据库
代码程序:flask
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永远成立spa
for i in user.iter_pages(left_edge=user.pages): print(i,end=" ") 输出结果:1 2 3 4 5 6 7 8 9
这样就完美解决了。固然以上促使以上三个任意条件中任意一个永远成立均可以进行完整遍历,固然还有其余遍历的方式,你们能够脑洞想一想。code