昨天看一了下問答區的問題,不少人都諮詢了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