Last update: March 28, 2020
Tested with Django 1.9 and newer
Yes. Shit happens and our application must be ready to manage correclty exceptions and give always a feedback to our users. Well designed error pages have the same layout of all other site pages. This means avoiding that our users saw the dafault Nginx/Apache error pages having the feeling that they had quitted our application.
Django offers a simple and elegant way to manage the more common HTTP errors, such as 400, 403, 404 and 500, enabling us to specify our custom views and templates.
All we need is to add these lines in our
# urls.py from django.conf.urls import ( handler400, handler403, handler404, handler500 ) handler400 = 'my_app.views.bad_request' handler403 = 'my_app.views.permission_denied' handler404 = 'my_app.views.page_not_found' handler500 = 'my_app.views.server_error' # ...
and implement our custom views in
# views.py from django.shortcuts import ( render_to_response ) from django.template import RequestContext # HTTP Error 400 def bad_request(request): response = render_to_response( '400.html', context_instance=RequestContext(request) ) response.status_code = 400 return response # ...