JSON在Jinja2模板中显示为unicode实体

ofk*_*fko 12 python django json jinja2

我使用带有webapp2的Jinja2.

正如他们的文档所说,Jinja2将所有"上下文"数据编码为unicode.当我尝试将json字符串插入模板时,这证明是有问题的:

jsonData = json.loads(get_the_file('catsJson.txt'))
Run Code Online (Sandbox Code Playgroud)

我将jsonData传递给模板,我能够成功循环它但是当我将一个json元素插入HTML时,它看起来像这样:

<option value='[u&#39;dogs&#39;, u&#39;cats&#39;]'>
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样(因为它在原始的json字符串中):

<option value='["dogs", "cats"]'>
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Mic*_*kel 21

您必须通过safe过滤器过滤值,告诉jinja2它不应该将任何其他过滤器应用于输出.在jinja2语法中,这将是:

{{ jsonData | safe }}
Run Code Online (Sandbox Code Playgroud)

请注意,由于您正在调用json.loads实际上不再具有json数据,因此您有一个python列表对象.因此,当它被序列化时,它与调用unicode(['dogs', 'cats'])哪个将为您提供u前缀.您可能不想实际解析json数据,或者您需要手动将列表转换为字符串,而不是让jinja2为您执行此操作.

  • 现在输出:`[u'dogs',u'cats']`如何删除u前缀? (2认同)
  • 你可以在jinja2中使用一些python,但不是很多.假设`item`是一个列表,你可以做`{{','.join(item)}}`.另外两个选项是使用jinja2`joiner`对象迭代列表,或者将列表转换为python中的字符串,并将新的"可渲染"对象公开给模板. (2认同)