templates: fix encoding handling in django templates (#20831)
This commit is contained in:
parent
4c7c3902db
commit
0218258a15
|
@ -66,6 +66,11 @@ def test_template_encoding():
|
|||
assert tmpl.render({'foo': 'fou'}) == 'fou à vélo'
|
||||
assert tmpl.render({'foo': 'félé'}) == 'félé à vélo'
|
||||
|
||||
tmpl = Template("{% if foo == 'félé' %}à vélo{% endif %}")
|
||||
assert tmpl.render() == ''
|
||||
assert tmpl.render({'foo': 'fou'}) == ''
|
||||
assert tmpl.render({'foo': 'félé'}) == 'à vélo'
|
||||
|
||||
# ezt
|
||||
tmpl = Template('[foo] à vélo')
|
||||
assert tmpl.render() == '[foo] à vélo'
|
||||
|
|
|
@ -449,6 +449,14 @@ def ezt_raises(exception, on_parse=False):
|
|||
raise TemplateError(message % ' '.join(parts))
|
||||
|
||||
|
||||
class UnicodeDjangoContext(DjangoContext):
|
||||
def __getitem__(self, key):
|
||||
s = super(UnicodeDjangoContext, self).__getitem__(key)
|
||||
if isinstance(s, str):
|
||||
return unicode(s, 'utf-8')
|
||||
return s
|
||||
|
||||
|
||||
class Template(object):
|
||||
def __init__(self, value, raises=False, ezt_format=ezt.FORMAT_RAW, ezt_only=False):
|
||||
'''Guess kind of template (Django or ezt), and parse it'''
|
||||
|
@ -482,7 +490,7 @@ class Template(object):
|
|||
return str(self.value)
|
||||
|
||||
def django_render(self, context={}):
|
||||
context = DjangoContext(context)
|
||||
context = UnicodeDjangoContext(context)
|
||||
try:
|
||||
rendered = self.template.render(context)
|
||||
except (DjangoTemplateSyntaxError, DjangoVariableDoesNotExist) as e:
|
||||
|
|
Loading…
Reference in New Issue