#10014 closed (fixed)
debug template tag fails in utf-8 encoded template
| Reported by: | Owned by: | Malcolm Tredinnick | |
|---|---|---|---|
| Component: | Template system | Version: | 1.0 |
| Severity: | Keywords: | unicode, utf-8, template | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Using the {% debug %} template tag inside a UTF-8 encoded template file that contains non-ASCII characters fails with an encoding error. Interestingly, this occurs only if the debug tag is used within a block.
I have attached a minimal test case. If you save that file as UTF-8 and render the template with render_to_response('test.html'), you should be able to see the bug.
Removing the 'ä' character from the template /or/ moving the {% debug %} tag outside the block makes the bug disappear.
Stack trace of the bug:
Caught an exception while rendering: 'ascii' codec can't encode character u'\xe4' in position 14: ordinal not in range(128)
Original Traceback (most recent call last):
File "C:\lib\Python2.5.2\lib\site-packages\django\template\debug.py", line 71, in render_node
result = node.render(context)
File "C:\lib\Python2.5.2\lib\site-packages\django\template\defaulttags.py", line 54, in render
output = [pformat(val) for val in context]
File "C:\lib\Python2.5.2\lib\pprint.py", line 59, in pformat
return PrettyPrinter(indent=indent, width=width, depth=depth).pformat(object)
File "C:\lib\Python2.5.2\lib\pprint.py", line 111, in pformat
self._format(object, sio, 0, 0, {}, 0)
File "C:\lib\Python2.5.2\lib\pprint.py", line 129, in _format
rep = self._repr(object, context, level - 1)
File "C:\lib\Python2.5.2\lib\pprint.py", line 195, in _repr
self._depth, level)
File "C:\lib\Python2.5.2\lib\pprint.py", line 207, in format
return _safe_repr(object, context, maxlevels, level)
File "C:\lib\Python2.5.2\lib\pprint.py", line 251, in _safe_repr
vrepr, vreadable, vrecur = saferepr(v, context, maxlevels, level)
File "C:\lib\Python2.5.2\lib\pprint.py", line 292, in _safe_repr
rep = repr(object)
File "C:\lib\Python2.5.2\lib\site-packages\django\template\loader_tags.py", line 17, in __repr__
return "<Block Node: %s. Contents: %r>" % (self.name, self.nodelist)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 14: ordinal not in range(128)
I am using Django 1.0 final.
Attachments (1)
Change History (4)
by , 17 years ago
comment:1 by , 17 years ago
| Owner: | changed from to |
|---|
comment:2 by , 17 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
(In [9757]) Fixed #10014 -- Don't crash when using debug template tag inside a block node tag.
Returning non-ASCII characters from TextNode.repr was causing
problems in the BlockNode.repr method (and probably in other places
we don't know about yet). We now forcibly convert to ascii and replace any
unconvertible characters, rather than returning some moderately
corrupted data in the non-ASCII case.
comment:3 by , 17 years ago
(In [9758]) [1.0.X] Fixed #10014 -- Don't crash when using debug template tag inside a block node tag.
Returning non-ASCII characters from TextNode.repr was causing
problems in the BlockNode.repr method (and probably in other places
we don't know about yet). We now forcibly convert to ascii and replace any
unconvertible characters, rather than returning some moderately
corrupted data in the non-ASCII case.
Backport of r9757 from trunk.
Test case (Django template)