Many resources are decorated error pages if there is a failure in processing a request from the client.
For a start has been made on the site customization of the most frequently occurring errors and other debugging until you come across, but still ahead.
As announced at the beginning of this article, was to customize the following error:
- 403 - Authorization error, access is denied.
- 404 - Page Not Found;
- 500 - Internal server error;
Customization error 404, 500
To customize the error 404 and 500 need to write a request handlers, and enough to write their ideas in the form of method.
The templates add your customized html file, that is:
- error404.html
- error500.html
The module that implements presentation for the site - home . The templates of the same module placed themselves customized templates errors.
Override the default handler in urls.py in the main module of site:
- handler404
- handler500
In the code, it looks like this:
from home.views import e_handler404, e_handler500 handler404 = e_handler404 handler500 = e_handler500
We describe the presentation in views.py home module file:
from django.shortcuts import render_to_response from django.template import RequestContext def e_handler404(request): context = RequestContext(request) response = render_to_response('error404.html', context) response.status_code = 404 return response def e_handler500(request): context = RequestContext(request) response = render_to_response('error500.html', context) response.status_code = 500 return response
Customization Errors 403
Error 403 occurs when an authorized user is not trying to gain access to that part of the site to which access is restricted to authorized users.
In Django is reached by the test status of the user and adding to the pages of the protective token, CSRF mechanism. This error can occur and if the user is logged in, but performs actions that require CSRF token verification, and the token is lost or is not true. The fact is that for the correctness of the token, you need to add in the template in the form of a special tag:
{% csrf_token %}
It will be entered and the token, but just to add to the template, it is not enough. Before you start rendering the template, you must add a token to the context that will be passed to the template. I.e,
from django.template.context_processors import csrf from django.shortcuts import render_to_response def any_request(request): context = {} context.update(csrf(request)) ... return render_to_response('any_request.html', context=context)
And now about customization. For csrf necessary that settings.py file added csrf module and indicated a view that will be engaged in the processing of this error:
MIDDLEWARE = [ ... 'django.middleware.csrf.CsrfViewMiddleware', ... ] CSRF_FAILURE_VIEW = 'home.views.csrf_failure'
The templates add error403.html, and views.py file prescribe processor performance.
def csrf_failure(request, reason=""): context = RequestContext(request) response = render_to_response('error403.html', context) response.status_code = 403 return response
For Django I recommend VDS-server of Timeweb hoster .
Супер, очень полезно!