Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flask custom error page 500 not working

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)
like image 944
Dan Safee Avatar asked Aug 16 '15 20:08

Dan Safee


People also ask

How do you throw a Flask error?

If the index has no corresponding message, the IndexError exception will be raised. You then use the except clause to catch that error, and you use abort( 404 ) to abort the request and respond with a 404 Not Found HTTP error. You will see the following response: Not Found The requested URL was not found on the server.

How do I create a 404 page on a Flask?

When using Flask for web APIs, you can use the same techniques as above to return JSON responses to API errors. abort() is called with a description parameter. The errorhandler() will use that as the JSON error message, and set the status code to 404.


1 Answers

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.

like image 191
Paul Becotte Avatar answered Sep 28 '22 16:09

Paul Becotte