Source code for django.views.defaults

fromurllib.parseimportquotefromdjango.httpimport(HttpResponseBadRequest,HttpResponseForbidden,HttpResponseNotFound,HttpResponseServerError,)fromdjango.templateimportContext,Engine,TemplateDoesNotExist,loaderfromdjango.views.decorators.csrfimportrequires_csrf_tokenERROR_404_TEMPLATE_NAME='404.html'ERROR_403_TEMPLATE_NAME='403.html'ERROR_400_TEMPLATE_NAME='400.html'ERROR_500_TEMPLATE_NAME='500.html'# This can be called when CsrfViewMiddleware.process_view has not run,# therefore need @requires_csrf_token in case the template needs# {% csrf_token %}.@requires_csrf_tokendefpage_not_found(request,exception,template_name=ERROR_404_TEMPLATE_NAME):""" Default 404 handler. Templates: :template:`404.html` Context: request_path The path of the requested URL (e.g., '/app/pages/bad_page/'). It's quoted to prevent a content injection attack. exception The message from the exception which triggered the 404 (if one was supplied), or the exception class name """exception_repr=exception.__class__.__name__# Try to get an "interesting" exception message, if any (and not the ugly# Resolver404 dictionary)try:message=exception.args[0]except(AttributeError,IndexError):passelse:ifisinstance(message,str):exception_repr=messagecontext={'request_path':quote(request.path),'exception':exception_repr,}try:template=loader.get_template(template_name)body=template.render(context,request)content_type=None# Django will use DEFAULT_CONTENT_TYPEexceptTemplateDoesNotExist:iftemplate_name!=ERROR_404_TEMPLATE_NAME:# Reraise if it's a missing custom template.raise# Render template (even though there are no substitutions) to allow# inspecting the context in tests.template=Engine().from_string('<h1>Not Found</h1>''<p>The requested resource was not found on this server.</p>')body=template.render(Context(context))content_type='text/html'returnHttpResponseNotFound(body,content_type=content_type)@requires_csrf_tokendefserver_error(request,template_name=ERROR_500_TEMPLATE_NAME):""" 500 error handler. Templates: :template:`500.html` Context: None """try:template=loader.get_template(template_name)exceptTemplateDoesNotExist:iftemplate_name!=ERROR_500_TEMPLATE_NAME:# Reraise if it's a missing custom template.raisereturnHttpResponseServerError('<h1>Server Error (500)</h1>',content_type='text/html')returnHttpResponseServerError(template.render())@requires_csrf_tokendefbad_request(request,exception,template_name=ERROR_400_TEMPLATE_NAME):""" 400 error handler. Templates: :template:`400.html` Context: None """try:template=loader.get_template(template_name)exceptTemplateDoesNotExist:iftemplate_name!=ERROR_400_TEMPLATE_NAME:# Reraise if it's a missing custom template.raisereturnHttpResponseBadRequest('<h1>Bad Request (400)</h1>',content_type='text/html')# No exception content is passed to the template, to not disclose any sensitive information.returnHttpResponseBadRequest(template.render())# This can be called when CsrfViewMiddleware.process_view has not run,# therefore need @requires_csrf_token in case the template needs# {% csrf_token %}.@requires_csrf_tokendefpermission_denied(request,exception,template_name=ERROR_403_TEMPLATE_NAME):""" Permission denied (403) handler. Templates: :template:`403.html` Context: None If the template does not exist, an Http403 response containing the text "403 Forbidden" (as per RFC 7231) will be returned. """try:template=loader.get_template(template_name)exceptTemplateDoesNotExist:iftemplate_name!=ERROR_403_TEMPLATE_NAME:# Reraise if it's a missing custom template.raisereturnHttpResponseForbidden('<h1>403 Forbidden</h1>',content_type='text/html')returnHttpResponseForbidden(template.render(request=request,context={'exception':str(exception)}))