Fixed #20822 -- Set content type of default error pages to 'text/html'.
Thanks Jimmy Song for the patch.
This commit is contained in:
parent
0bcdcc7eb9
commit
784377544e
|
@ -21,11 +21,14 @@ def page_not_found(request, template_name='404.html'):
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
template = loader.get_template(template_name)
|
template = loader.get_template(template_name)
|
||||||
|
content_type = None # Django will use DEFAULT_CONTENT_TYPE
|
||||||
except TemplateDoesNotExist:
|
except TemplateDoesNotExist:
|
||||||
template = Template(
|
template = Template(
|
||||||
'<h1>Not Found</h1>'
|
'<h1>Not Found</h1>'
|
||||||
'<p>The requested URL {{ request_path }} was not found on this server.</p>')
|
'<p>The requested URL {{ request_path }} was not found on this server.</p>')
|
||||||
return http.HttpResponseNotFound(template.render(RequestContext(request, {'request_path': request.path})))
|
content_type = 'text/html'
|
||||||
|
body = template.render(RequestContext(request, {'request_path': request.path}))
|
||||||
|
return http.HttpResponseNotFound(body, content_type=content_type)
|
||||||
|
|
||||||
|
|
||||||
@requires_csrf_token
|
@requires_csrf_token
|
||||||
|
@ -39,7 +42,7 @@ def server_error(request, template_name='500.html'):
|
||||||
try:
|
try:
|
||||||
template = loader.get_template(template_name)
|
template = loader.get_template(template_name)
|
||||||
except TemplateDoesNotExist:
|
except TemplateDoesNotExist:
|
||||||
return http.HttpResponseServerError('<h1>Server Error (500)</h1>')
|
return http.HttpResponseServerError('<h1>Server Error (500)</h1>', content_type='text/html')
|
||||||
return http.HttpResponseServerError(template.render(Context({})))
|
return http.HttpResponseServerError(template.render(Context({})))
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,7 +57,7 @@ def bad_request(request, template_name='400.html'):
|
||||||
try:
|
try:
|
||||||
template = loader.get_template(template_name)
|
template = loader.get_template(template_name)
|
||||||
except TemplateDoesNotExist:
|
except TemplateDoesNotExist:
|
||||||
return http.HttpResponseBadRequest('<h1>Bad Request (400)</h1>')
|
return http.HttpResponseBadRequest('<h1>Bad Request (400)</h1>', content_type='text/html')
|
||||||
return http.HttpResponseBadRequest(template.render(Context({})))
|
return http.HttpResponseBadRequest(template.render(Context({})))
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,7 +78,7 @@ def permission_denied(request, template_name='403.html'):
|
||||||
try:
|
try:
|
||||||
template = loader.get_template(template_name)
|
template = loader.get_template(template_name)
|
||||||
except TemplateDoesNotExist:
|
except TemplateDoesNotExist:
|
||||||
return http.HttpResponseForbidden('<h1>403 Forbidden</h1>')
|
return http.HttpResponseForbidden('<h1>403 Forbidden</h1>', content_type='text/html')
|
||||||
return http.HttpResponseForbidden(template.render(RequestContext(request)))
|
return http.HttpResponseForbidden(template.render(RequestContext(request)))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test.utils import setup_test_template_loader, restore_template_loaders
|
from django.test.utils import (setup_test_template_loader,
|
||||||
|
restore_template_loaders, override_settings)
|
||||||
|
|
||||||
from ..models import Author, Article, UrlArticle
|
from ..models import Author, Article, UrlArticle
|
||||||
|
|
||||||
|
@ -59,3 +60,20 @@ class DefaultsTests(TestCase):
|
||||||
article = UrlArticle.objects.get(pk=1)
|
article = UrlArticle.objects.get(pk=1)
|
||||||
self.assertTrue(getattr(article.get_absolute_url, 'purge', False),
|
self.assertTrue(getattr(article.get_absolute_url, 'purge', False),
|
||||||
'The attributes of the original get_absolute_url must be added.')
|
'The attributes of the original get_absolute_url must be added.')
|
||||||
|
|
||||||
|
@override_settings(DEFAULT_CONTENT_TYPE="text/xml")
|
||||||
|
def test_default_content_type_is_text_html(self):
|
||||||
|
"""
|
||||||
|
Content-Type of the default error responses is text/html. Refs #20822.
|
||||||
|
"""
|
||||||
|
response = self.client.get('/views/raises400/')
|
||||||
|
self.assertEqual(response['Content-Type'], 'text/html')
|
||||||
|
|
||||||
|
response = self.client.get('/views/raises403/')
|
||||||
|
self.assertEqual(response['Content-Type'], 'text/html')
|
||||||
|
|
||||||
|
response = self.client.get('/views/non_existing_url/')
|
||||||
|
self.assertEqual(response['Content-Type'], 'text/html')
|
||||||
|
|
||||||
|
response = self.client.get('/views/server_error/')
|
||||||
|
self.assertEqual(response['Content-Type'], 'text/html')
|
||||||
|
|
|
@ -45,8 +45,10 @@ urlpatterns = patterns('',
|
||||||
|
|
||||||
# a view that raises an exception for the debug view
|
# a view that raises an exception for the debug view
|
||||||
(r'raises/$', views.raises),
|
(r'raises/$', views.raises),
|
||||||
(r'raises404/$', views.raises404),
|
|
||||||
|
(r'raises400/$', views.raises400),
|
||||||
(r'raises403/$', views.raises403),
|
(r'raises403/$', views.raises403),
|
||||||
|
(r'raises404/$', views.raises404),
|
||||||
|
|
||||||
# i18n views
|
# i18n views
|
||||||
(r'^i18n/', include('django.conf.urls.i18n')),
|
(r'^i18n/', include('django.conf.urls.i18n')),
|
||||||
|
|
|
@ -2,7 +2,7 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied, SuspiciousOperation
|
||||||
from django.core.urlresolvers import get_resolver
|
from django.core.urlresolvers import get_resolver
|
||||||
from django.http import HttpResponse, HttpResponseRedirect
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
from django.shortcuts import render_to_response, render
|
from django.shortcuts import render_to_response, render
|
||||||
|
@ -31,13 +31,16 @@ def raises(request):
|
||||||
except Exception:
|
except Exception:
|
||||||
return technical_500_response(request, *sys.exc_info())
|
return technical_500_response(request, *sys.exc_info())
|
||||||
|
|
||||||
def raises404(request):
|
def raises400(request):
|
||||||
resolver = get_resolver(None)
|
raise SuspiciousOperation
|
||||||
resolver.resolve('')
|
|
||||||
|
|
||||||
def raises403(request):
|
def raises403(request):
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
|
|
||||||
|
def raises404(request):
|
||||||
|
resolver = get_resolver(None)
|
||||||
|
resolver.resolve('')
|
||||||
|
|
||||||
def redirect(request):
|
def redirect(request):
|
||||||
"""
|
"""
|
||||||
Forces an HTTP redirect.
|
Forces an HTTP redirect.
|
||||||
|
|
Loading…
Reference in New Issue