Flask错误处理程序

3

我创建了一个简单的多应用 Flask 网站。我将所有错误视图(404、501 等)移动到应用程序 errors 中。但是当出现错误时,我只看到 Flask 的默认错误页面,而不是我的错误页面。

项目结构如下:

/site
|-> main.py
     from flask import Flask

     app = Flask(__name__)
     app.config.from_pyfile('config.py')

     import errors, account, mysite, blog
     from errors.views import not_found

     @app.route("/")
     def index_view():
         return "Welcome!"

     @app.route("/about")
     def about_view():
         return "About"

     if __name__ == "__main__":
         app.run(debug=True)
|-> templates
  |-> errors
    |-> 404.html

|->errors
  |-> __init__.py
     from main import app
     import errors.views
  |-> views
     from errors import app
     from flask import render_template

     @app.errorhandler(404)
     def not_found(error):
         return render_template('errors/404.html'), 404

如果我将errors/views.py的内容返回到main.py中,它会按预期工作并显示我的错误页面。

据说这是一个“多应用程序站点”,但只有一个应用程序对象。 - code_dredd
1个回答

4
将所有错误模板(如404等)放置在您的项目主模板文件夹中。因此,如果您的项目名为“myproject”,您可以拥有类似以下的内容:
myproject/
    __init__.py
    templates
        404.html
        503.html
        .. and so on

在你的__init__.py文件中调用以下代码:

app = Flask(__name__)

@app.errorhandler(404)
def not_found(error):
    return render_template('404.html'), 404    

这是一个显而易见但不好的解决方案。如果我将另一个应用程序添加到项目中,我将面临同样的问题。这就是为什么我想要将事件错误从项目中分离出来的原因。 - Alex G.P.
@AlexG.P. 我只是路过,知道我来晚了,但一个项目应该只有一个应用程序对象。如果您要添加另一个应用程序对象,则最好创建一个新的/单独的项目。这个答案是一个很好的解决方案。 - code_dredd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接