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.
0
0
Custom error pages (404, 500) in Flask
Introduction
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.