2013-10-29 24 views
4

我有一個燒瓶應用程序,它看起來有點像這樣:瓶每藍圖錯誤頁面

app.py 
blueprints/ 
    www.py 
    shop.py 

app.py進口藍圖對象從每個在blueprints目錄中的文件,並在app.pyFlask對象與它們註冊一個合適的子域(也從文件中導入)。每一個藍圖註冊錯誤處理程序,但這些只是在一個視圖中手動調用abort(),而不是一般的錯誤調用(即呼籲通過shop.py管理的子域不存在的URL上調用app.py錯誤處理程序來代替。)

有以任何方式強制瓶子將錯誤傳遞到正在處理髮生該錯誤的子域的藍圖?

回答

-1

您可以使用current_app並將它放在藍圖中。喜歡的東西:

shop.py

from flask import current_app 

@current_app.errorhandler(404) 
def page_not_found(e): 
return redirect(url_for('shop.index')) 
+1

這將覆蓋上了'current_app' 404錯誤設置錯誤處理程序。我認爲@Drakekin試圖做的是讓'status.drakekin.com'的藍圖使用'status'藍圖中定義的404錯誤處理程序,'api.drakekin.com'藍圖使用*不同*錯誤處理程序。 –

+0

@SeanVieira完全正確 – Drakekin

+0

thx。很好學習。我站在更正:) – codegeek

4

瓶對404和500系列文檔says that this is not possible。如果您需要此功能,您可能可以使用通配符路線在你藍圖來處理404:

@a_blueprint.route("<path:invalid_path>") 
def missing_resource(invalid_path): 
    return "There isn't anything at " + invalid_path, 404 
+0

恐怕我不明白你的建議。該路線將匹配路由到'a_blueprint'的所有路線。我現在有大部分的解決方案,我可能會在今晚回答我自己的問題,但謝謝你的嘗試。 – Drakekin

+0

@Drakekin - 我剛剛使用[本代碼中的代碼](https://gist.github.com/svieira/7261308)進行了測試,Werkzeug在所有這些情況下確實做了正確的事情。 –

+0

我不覺得這麼愚蠢!謝謝@SeanVieira。我決定提出一個'werkzeug.exceptions.NotFound',以便我可以像處理藍圖上的其他註冊錯誤處理程序一樣處理404錯誤。 – jmagnusson