Flask custom error page 500 not working

2019-04-29 22:08发布

I have the following code in __init__.py

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

@app.errorhandler(500)
def internal_server_error(e):
    return render_template('500.html'), 500

@app.errorhandler(403)
def page_forbidden(e):
    return render_template('403.html'), 500

It used to catch all 500 errors and show my nice 500.html template. However I moved all my views into separate blueprint files and now the 500 errorhandler does not work. It is only that handler though. 404 works just fine.

If the server throws a 500 error, it will display the default Chrome INTERNAL SERVER ERROR message and not my template. Did I do something wrong when I created all my blueprints that would create this issue?

Here is the entire __init__.py file

import datetime
import mysql.connector
import os
from flask import Flask, render_template, session, request, Blueprint
from flask.ext.moment import Moment
from flask.ext.login import LoginManager
from db_classes import User

from info import info_blueprint
from claims import claims_blueprint
from users import users_blueprint
from members import members_blueprint
from drug import drug_blueprint
from auth import auth_blueprint
from formulary import formulary_blueprint

from config import MYSQL_USR, MYSQL_HOST, MYSQL_PASS, MYSQL_DB, MYSQL_PORT, second_to_live

from decorators import role_required

app = Flask(__name__, template_folder="static/templates")
app.config.from_object('config')

moment = Moment(app)

login_manager = LoginManager()
login_manager.init_app(app)
login_manager.session_protection = 'strong'
login_manager.login_view = 'login'

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))


####################
#   Blueprints
####################

app.register_blueprint(info_blueprint)
app.register_blueprint(claims_blueprint)
app.register_blueprint(users_blueprint)
app.register_blueprint(members_blueprint)
app.register_blueprint(drug_blueprint)
app.register_blueprint(formulary_blueprint)
app.register_blueprint(auth_blueprint)



#####################
#   Error Routes
#####################  


@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

@app.errorhandler(500)
def internal_server_error(e):
    return render_template('500.html'), 500

@app.errorhandler(403)
def page_forbidden(e):
    return render_template('403.html'), 500

#####################
#   Context Processors
#####################

@app.before_request
def make_session_permanent():
    session.permanent = True
    app.permanent_session_lifetime = datetime.timedelta(seconds=second_to_live)

@app.context_processor
def inject_time():
    return dict(current_time=datetime.datetime.utcnow())

if __name__ == "__main__":
    app.run(host= '0.0.0.0', debug=True)

1条回答
闹够了就滚
2楼-- · 2019-04-29 22:38

Something I didn't realize... from the Flask docs

Please note that if you add an error handler for “500 Internal Server Error”, Flask will not trigger it if it’s running in Debug mode.

查看更多
登录 后发表回答