Django模板上的Unicode字符串显示

nev*_*sly 2 python django unicode json

我正在使用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);`

然后我就可以登录?????我的网页了.
但我发现如果我直接使用变量:

<div id="foobar">{{ foobar }}</div>

它会将unicode字符串显示为字节字符串:
{ "name":"\u8d5e\u4e00\u4e0b\u6211\u4eec" }
即使我使用的{{foobar|safe}}话也没有改变.

现在,我想问为什么会发生这种情况或者我有什么不对劲?如果我想直接使用变量,我该怎么办{{ foobar }}

ban*_*kat 7

bar = json.dumps(foo, ensure_ascii=False)将导致bar成为一个unicode对象; 没有ensure_ascii = False,bar是一个str.

Django的smart_text方法也可能对转换很有用.