Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

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.
  • Loading branch information...
commit 6c12cd15e990b0ff5a5e85328f0a092f4bfe8080 1 parent 3f6cc33
@ramiro ramiro authored
View
6 django/views/debug.py
@@ -227,7 +227,7 @@ def format_path_status(self, path):
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 @@ def get_traceback_data(self):
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):
View
16 tests/view_tests/tests/test_debug.py
@@ -5,6 +5,7 @@
import inspect
import os
+import re
import shutil
import sys
from tempfile import NamedTemporaryFile, mkdtemp, mkstemp
@@ -69,6 +70,21 @@ def test_view_exceptions(self):
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:
View
1  tests/view_tests/urls.py
@@ -49,6 +49,7 @@
(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')),
View
8 tests/view_tests/views.py
@@ -31,6 +31,14 @@ def callable():
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

0 comments on commit 6c12cd1

Please sign in to comment.
Something went wrong with that request. Please try again.