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

Posted

技术标签:

【中文标题】django:使用没有 unicode \'u\' 类型指示符的安全过滤器渲染变量【英文标题】:django: rendering a variable with safe filter without unicode 'u' type designatordjango:使用没有 unicode 'u' 类型指示符的安全过滤器渲染变量 【发布时间】:2013-03-12 07:00:53 【问题描述】:

我正在尝试将字典传递给 django 模板。在 django 视图中,变量是这样初始化和传递的:

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

在模板中,我有

 foo|default:""|safe

如果相关,我在 jquery sn-p 中有上述行。那个 sn-p 失败了,因为 dict 被呈现为

['a': u'b'] 

而不是我所期望的:

['a': 'b'] 

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

【问题讨论】:

return render(request, 'template.html', 'foo': foo.encode("utf8") @catherine foo (字典)有编码方法吗?我不这么认为。无论如何,我尝试了 str(foo).encode("utf8"),但还是不行 你的意思是将字典渲染为 JSON 吗?如果是这样,还有更好的选择。 嗨@valtron,我相信 JSON 会起作用。我真的想生成一个formData 数组 你有没有在你的 foo 中尝试过,而不是在 foo 之外 'foo': str(foo.encode("utf8")) 【参考方案1】:

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

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

布尔字面量是小写的

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

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

% load jsonify %
...
 foo|jsonify 

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于django:使用没有 unicode 'u' 类型指示符的安全过滤器渲染变量的主要内容,如果未能解决你的问题,请参考以下文章

管理页面上的 django unicode 错误

AttributeError:'unicode'对象没有属性'get' - 在Django Forms中

Django之Form组件与验证规则

Django单元测试中的Unicode

特殊符号Unicode编码

Django 之 分表