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

前端 未结 3 1143
孤独总比滥情好
孤独总比滥情好 2021-02-05 20:40

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

相关标签:
3条回答
  • 2021-02-05 20:50

    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/

    0 讨论(0)
  • 2021-02-05 20:58

    If you look into the documentation and the source code of django.views.defaults you see that only 404 and 500 errors are supported in a way that you only have to add the 404.html resp. 500.html to your templates directory.

    In the doc. you can also read the following

    Returning HTTP error codes in Django is easy. There are subclasses of HttpResponse for a number of common HTTP status codes other than 200 (which means "OK"). You can find the full list of available subclasses in the request/response documentation.

    Thus if you want to return a 405 error, you have to use the HttpResponseNotAllowed class

    An example

    0 讨论(0)
  • 2021-02-05 21:02

    I'm not sure that's possible. Perhaps you should consider filing a bug report.

    0 讨论(0)
提交回复
热议问题