我正在使用django v1.5.*,我将渲染一个名为"foobar"的变量,它是一个json obj并包含unicode字符串.
def home( request ): import json foo = {"name": u"?????"} bar = json.dumps( foo ) return render_to_response( 'myapp/home.html', { "foobar": bar, }, context_instance=RequestContext(request) )
在我的模板中,我在javascript中编码json obj,然后追加到div,它可以显示预期的字符串:
foobar=JSON.encode('{{foobar|safe}}'); $("#foobar").html(foobar.name);`
然后我就可以登录?????
我的网页了.
但我发现如果我直接使用变量:
它会将unicode字符串显示为字节字符串:
{ "name":"\u8d5e\u4e00\u4e0b\u6211\u4eec" }
即使我使用的{{foobar|safe}}
话也没有改变.
现在,我想问为什么会发生这种情况或者我有什么不对劲?如果我想直接使用变量,我该怎么办{{ foobar }}
?
bar = json.dumps(foo, ensure_ascii=False)
将导致bar
成为一个unicode
对象; 没有ensure_ascii = False,bar
是一个str
.
Django的smart_text方法也可能对转换很有用.