昨天看一了下問答區的問題,很多人都諮詢了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
這樣就完美解決了。當然以上促使以上三個任意條件永遠成立都可以進行完整遍歷。