flask:error_handler用于蓝图

blu*_*ank 23 blueprint flask http-status-code-404

可以为蓝图设置error_handler吗?

@blueprint.errorhandler(404)
def page_not_found(error):
    return 'This page does not exist', 404
Run Code Online (Sandbox Code Playgroud)

编辑:

https://github.com/mitsuhiko/flask/blob/18413ed1bf08261acf6d40f8ba65a98ae586bb29/flask/blueprints.py

您可以指定应用程序范围和蓝图本地error_handler

suz*_*kya 26

你可以使用这样的Blueprint.app_errorhandler方法:

bp = Blueprint('errors', __name__)

@bp.app_errorhandler(404)
def handle_404(err):
    return render_template('404.html'), 404

@bp.app_errorhandler(500)
def handle_500(err):
    return render_template('500.html'), 500
Run Code Online (Sandbox Code Playgroud)

  • 即使有了这个,蓝图的视图中的`abort(404)`也会被app的错误处理程序处理而不是这个.有关详细信息,请参阅[Flask doc](http://flask.pocoo.org/docs/0.10/api/#flask.Blueprint.errorhandler). (3认同)

小智 10

errorhandler是从 Flask 继承的方法,而不是蓝图。如果您使用的是蓝图,则等效于app_errorhandler.

文档建议采用以下方法:

def app_errorhandler(self, code):
        """Like :meth:`Flask.errorhandler` but for a blueprint.  This
        handler is used for all requests, even if outside of the blueprint.
        """
Run Code Online (Sandbox Code Playgroud)

因此,这应该有效:

from flask import Blueprint, render_template

USER = Blueprint('user', __name__)

@USER.app_errorhandler(404)
def page_not_found(e):
    """ Return error 404 """
    return render_template('404.html'), 404
Run Code Online (Sandbox Code Playgroud)

另一方面,虽然下面的方法没有给我带来任何错误,但它不起作用:

from flask import Blueprint, render_template

USER = Blueprint('user', __name__)

@USER.errorhandler(404)
def page_not_found(e):
    """ Return error 404 """
    return render_template('404.html'), 404
Run Code Online (Sandbox Code Playgroud)

  • 文档说我们必须使用 errorhandler 而不是 app_errorhandler。你注意到了吗? (3认同)
  • 谢谢,这个效果很好。应该是公认的答案。 (2认同)