7

我正在尝试将字典传递给 django 模板。在 django 视图中,变量被初始化并按如下方式传递:

foo = {'a':'b'}
...
return render(request, 'template.html', {'foo': str(foo)}

在模板中,我有

{{ foo|default:"{}"|safe}}

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

[{'a': u'b'}] 

而不是我所期望的:

[{'a': 'b'}] 

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

4

2 回答 2

5

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

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

  • 布尔文字是小写的

  • 如果您的数据包含数字、字符串、列表和字典以外的其他内容,str则在它们上使用可能会默默地产生无效的 JSON

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

{% load jsonify %}
...
{{ foo|jsonify }}
于 2013-03-23T16:13:23.240 回答
0

我遇到这个问题的原因是因为我的字典实际上包含一个 unicode 值。上面的玩具示例是一个简化。当我str(val)在将 val 插入字典之前运行时,渲染按预期发生。

于 2013-03-23T11:07:26.523 回答