標籤:

Flask多個路由重複用到從資料庫搜索的數據如何減少重複代碼?

比如我上圖,框出來的這個「標籤雲」,他不像導航一樣每個頁面都有可以用模版,他只是這3個頁面有,但是他的內容每次都是搜索資料庫得出來的,難道我每個路由都要寫去搜索「標籤雲」的內容么,有什麼方法可以減少這種重複代碼。


你想要的是一個全局模板變數,類似Flask-Login提供的current_user。

Flask提供了context_processor裝飾器,可以用來註冊模板上下文處理器(函數)。它返回一個包含變數和變數值的字典,比如:

@app.context_processor
def make_template_context():
categories = Category.query.all()
return dict(categories=categories)

它會把字典中的變數注入到模板上下文里,然後你就可以在模板里直接使用categories變數。

對於藍本模式,可以使用app_context_processor裝飾器。


你這個要是更新的不頻繁就把查詢封裝個函數,然後用flask-cache緩存一下好了


用before_request勾子,在裡面把公共的東西查出來(最好緩存一段時間,不要每次查),然後綁到g對象上,然後模板里從g對象取出來渲染就行了


推薦閱讀:

簡單的時間序列數據採樣和模擬股票折線圖
Windows 下安裝python版本xgboost
python3.x 如何從str中提取bytes?
Python · 元類(Meta Class)及其應用
高德API+Python解決租房問題

TAG:Python | Flask |