django:使用安全过滤器渲染变量而不使用unicode'u'类型指示符

Nei*_*eil 7 django django-templates django-template-filters

我正在尝试将字典传递给django模板.在django视图中,变量被初始化并按原样传递:

foo = {'a':'b'}
...
return render(request, 'template.html', {'foo': str(foo)}
Run Code Online (Sandbox Code Playgroud)

在模板中,我有

{{ foo|default:"{}"|safe}}
Run Code Online (Sandbox Code Playgroud)

如果它是相关的,我在jquery片段中有上面的行.该片段失败,因为dict被渲染为

[{'a': u'b'}] 
Run Code Online (Sandbox Code Playgroud)

而不是我期望的:

[{'a': 'b'}] 
Run Code Online (Sandbox Code Playgroud)

似乎安全过滤器没有删除dict值'b'之前的unicode u.我怎么做?

val*_*ron 5

您应该使用函数将其显式转换为JSON,因为JSON和默认Python字符串化之间存在一些细微差别:

  • JSON中的字符串在技术上必须用分隔"而不是分隔',尽管解析器也倾向于接受后者(参见json.org上的字符串规则)

  • Bool文字是小写的

  • 如果您的数据包含数字,字符串,列表和dicts以外的内容,则使用str它们可能会默默生成无效的JSON

使用模板过滤器,例如django-jsonify:

{% load jsonify %}
...
{{ foo|jsonify }}
Run Code Online (Sandbox Code Playgroud)