Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to display a custom error page for HTTP status 405 (method not allowed) in Django when using @require_POST

My question is simple, how do I display a custom error page for HTTP status 405 (method not allowed) in Django when using the @require_POST decorator?

I'm using the django.views.decorators.http.require_POST decorator, and when the page is visited by GET request, the console shows a 405 error, but the page is just blank (not even a Django error page). How do I get Django to display a custom and/or default error page for this kind of error?

EDIT: It's worth mentioning that I've tried putting a 404.html, 500.html and 405.html page in my templates folder - but that does not help either. I have also varied between DEBUG = True and False, to no avail.

like image 466
Herman Schaaf Avatar asked Jan 06 '11 11:01

Herman Schaaf


1 Answers

You have to write custom Django middleware. You can start with this one and extend it to check if 405.html file exists and so on:

from django.http import HttpResponseNotAllowed
from django.template import RequestContext
from django.template import loader


class HttpResponseNotAllowedMiddleware(object):
    def process_response(self, request, response):
        if isinstance(response, HttpResponseNotAllowed):
            context = RequestContext(request)
            response.content = loader.render_to_string("405.html", context_instance=context)
        return response

Check docs if you don't know how to install middleware:

http://docs.djangoproject.com/en/dev/topics/http/middleware/

You can also check this article:

http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/

like image 121
Vladimir Mihailenco Avatar answered Oct 01 '22 11:10

Vladimir Mihailenco