ブループリントにerror_handlerを設定できますか?
@blueprint.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404
編集:
https://github.com/mitsuhiko/flask/blob/18413ed1bf08261acf6d40f8ba65a98ae586bb29/flask/blueprints.py
アプリ全体とブループリントローカルerror_handlerを指定できます
次のような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
errorhandler
は、Blueprintではなく、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.
"""
したがって、これは機能するはずです。
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
一方、以下のアプローチではエラーは発生しませんでしたが、機能しませんでした。
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
私も最高評価の回答を得ることができませんでしたが、回避策は次のとおりです。
ブループリントのendでキャッチオールを使用できます。これがどれほど堅牢で推奨されているかはわかりませんが、機能します。メソッドごとに異なるエラーメッセージを追加することもできます。
@blueprint.route('/<path:path>')
def page_not_found(path):
return "Custom failure message"
リクエストプロキシオブジェクトを使用して、アプリケーションレベルでエラー処理を追加します。
from flask import request,jsonify
@app.errorhandler(404)
@app.errorhandler(405)
def _handle_api_error(ex):
if request.path.startswith('/api/'):
return jsonify(ex)
else:
return ex