Flask分頁iter_pages之None分析

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

這樣就完美解決了。當然以上促使以上三個任意條件永遠成立都可以進行完整遍歷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章