[1.7.x] Fixed #23060 -- Prevented UnicodeDecodeError in debug templatetag

Backport of 08451f17d0 from master.
This commit is contained in:
qingfeng 2014-07-22 01:38:34 +08:00 committed by Claude Paroz
parent 1ef544f91f
commit 3a2badcbb7
2 changed files with 11 additions and 1 deletions

View File

@ -89,7 +89,7 @@ class CycleNode(Node):
class DebugNode(Node): class DebugNode(Node):
def render(self, context): def render(self, context):
from pprint import pformat from pprint import pformat
output = [pformat(val) for val in context] output = [force_text(pformat(val)) for val in context]
output.append('\n\n') output.append('\n\n')
output.append(pformat(sys.modules)) output.append(pformat(sys.modules))
return ''.join(output) return ''.join(output)

View File

@ -10,6 +10,7 @@ import warnings
from django import template from django import template
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import Group
from django.core import urlresolvers from django.core import urlresolvers
from django.template import (base as template_base, loader, Context, from django.template import (base as template_base, loader, Context,
RequestContext, Template, TemplateSyntaxError) RequestContext, Template, TemplateSyntaxError)
@ -524,6 +525,15 @@ class TemplateRegressionTests(TestCase):
with self.assertRaises(urlresolvers.NoReverseMatch): with self.assertRaises(urlresolvers.NoReverseMatch):
t.render(Context({})) t.render(Context({}))
def test_debug_tag_non_ascii(self):
"""
Test non-ASCII model representation in debug output (#23060).
"""
Group.objects.create(name="清風")
c1 = Context({"objs": Group.objects.all()})
t1 = Template('{% debug %}')
self.assertIn("清風", t1.render(c1))
# Set ALLOWED_INCLUDE_ROOTS so that ssi works. # Set ALLOWED_INCLUDE_ROOTS so that ssi works.
@override_settings(MEDIA_URL="/media/", STATIC_URL="/static/", @override_settings(MEDIA_URL="/media/", STATIC_URL="/static/",