0
0
Flaskframework~5 mins

Custom error pages (404, 500) in Flask

Choose your learning style9 modes available
Introduction

Custom error pages help users understand when something goes wrong on your website. They make your site look friendly and professional instead of showing confusing default messages.

When a user tries to visit a page that does not exist (404 error).
When the server encounters an unexpected problem (500 error).
To provide helpful instructions or links on error pages.
To keep your website's style consistent even on error pages.
Syntax
Flask
from flask import Flask, render_template

app = Flask(__name__)

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

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

Use @app.errorhandler(code) to define a function for each error code.

Return the error page template and the error code as a tuple.

Examples
This example shows how to create a custom 404 error page.
Flask
from flask import Flask, render_template

app = Flask(__name__)

@app.errorhandler(404)
def not_found(e):
    return render_template('404.html'), 404
This example shows how to create a custom 500 error page.
Flask
from flask import Flask, render_template

app = Flask(__name__)

@app.errorhandler(500)
def server_error(e):
    return render_template('500.html'), 500
Sample Program

This Flask app shows how to create custom pages for 404 and 500 errors. Visiting a missing page shows the 404 message. Visiting /cause500 triggers a server error to show the 500 message.

Flask
from flask import Flask, render_template_string, abort

app = Flask(__name__)

# Custom 404 error page
@app.errorhandler(404)
def page_not_found(e):
    return render_template_string('<h1>404 Not Found</h1><p>Sorry, the page you requested does not exist.</p>'), 404

# Custom 500 error page
@app.errorhandler(500)
def internal_error(e):
    return render_template_string('<h1>500 Internal Server Error</h1><p>Oops! Something went wrong on our side.</p>'), 500

@app.route('/')
def home():
    return '<h1>Welcome to the Home Page</h1>'

@app.route('/cause500')
def cause_error():
    # This will trigger a 500 error
    abort(500)

if __name__ == '__main__':
    app.run(debug=True)
OutputSuccess
Important Notes

Use render_template with HTML files for real projects instead of render_template_string.

Set debug=False in production to avoid showing default error pages.

Custom error pages improve user experience and help keep your site professional.

Summary

Custom error pages replace default error messages with friendly pages.

Use @app.errorhandler to define handlers for specific error codes.

Return the error page content and the error code together.