Unlocalize line numbers and ids in debug 500 view.
While using USE_L10N, line numbers and IDs were printed as comma (or locale equivalent) separated values. Thanks Kronuz for the report and intial patch. Fixes #20861.
This commit is contained in:
parent
3f6cc33cff
commit
6c12cd15e9
|
@ -227,7 +227,7 @@ class ExceptionReporter(object):
|
|||
return "File exists"
|
||||
|
||||
def get_traceback_data(self):
|
||||
"Return a Context instance containing traceback information."
|
||||
"""Return a dictionary containing traceback information."""
|
||||
|
||||
if self.exc_type and issubclass(self.exc_type, TemplateDoesNotExist):
|
||||
from django.template.loader import template_source_loaders
|
||||
|
@ -295,13 +295,13 @@ class ExceptionReporter(object):
|
|||
def get_traceback_html(self):
|
||||
"Return HTML version of debug 500 HTTP error page."
|
||||
t = Template(TECHNICAL_500_TEMPLATE, name='Technical 500 template')
|
||||
c = Context(self.get_traceback_data())
|
||||
c = Context(self.get_traceback_data(), use_l10n=False)
|
||||
return t.render(c)
|
||||
|
||||
def get_traceback_text(self):
|
||||
"Return plain text version of debug 500 HTTP error page."
|
||||
t = Template(TECHNICAL_500_TEXT_TEMPLATE, name='Technical 500 template')
|
||||
c = Context(self.get_traceback_data(), autoescape=False)
|
||||
c = Context(self.get_traceback_data(), autoescape=False, use_l10n=False)
|
||||
return t.render(c)
|
||||
|
||||
def get_template_exception_info(self):
|
||||
|
|
|
@ -5,6 +5,7 @@ from __future__ import unicode_literals
|
|||
|
||||
import inspect
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import sys
|
||||
from tempfile import NamedTemporaryFile, mkdtemp, mkstemp
|
||||
|
@ -69,6 +70,21 @@ class DebugViewTests(TestCase):
|
|||
self.assertRaises(BrokenException, self.client.get,
|
||||
reverse('view_exception', args=(n,)))
|
||||
|
||||
def test_non_l10ned_numeric_ids(self):
|
||||
"""
|
||||
Numeric IDs and fancy traceback context blocks line numbers shouldn't be localized.
|
||||
"""
|
||||
with self.settings(DEBUG=True, USE_L10N=True):
|
||||
response = self.client.get('/views/raises500/')
|
||||
# We look for a HTML fragment of the form
|
||||
# '<div class="context" id="c38123208">', not '<div class="context" id="c38,123,208"'
|
||||
self.assertContains(response, '<div class="context" id="', status_code=500)
|
||||
match = re.search(b'<div class="context" id="(?P<id>[^"]+)">', response.content)
|
||||
self.assertFalse(match is None)
|
||||
id_repr = match.group('id')
|
||||
self.assertFalse(re.search(b'[^c\d]', id_repr),
|
||||
"Numeric IDs in debug response HTML page shouldn't be localized (value: %s)." % id_repr)
|
||||
|
||||
def test_template_exceptions(self):
|
||||
for n in range(len(except_args)):
|
||||
try:
|
||||
|
|
|
@ -49,6 +49,7 @@ urlpatterns = patterns('',
|
|||
(r'raises400/$', views.raises400),
|
||||
(r'raises403/$', views.raises403),
|
||||
(r'raises404/$', views.raises404),
|
||||
(r'raises500/$', views.raises500),
|
||||
|
||||
# i18n views
|
||||
(r'^i18n/', include('django.conf.urls.i18n')),
|
||||
|
|
|
@ -31,6 +31,14 @@ def raises(request):
|
|||
except Exception:
|
||||
return technical_500_response(request, *sys.exc_info())
|
||||
|
||||
def raises500(request):
|
||||
# We need to inspect the HTML generated by the fancy 500 debug view but
|
||||
# the test client ignores it, so we send it explicitly.
|
||||
try:
|
||||
raise Exception
|
||||
except Exception:
|
||||
return technical_500_response(request, *sys.exc_info())
|
||||
|
||||
def raises400(request):
|
||||
raise SuspiciousOperation
|
||||
|
||||
|
|
Loading…
Reference in New Issue