2

这更像是一个一般的 python 问题,但在 Django 的上下文中它变得有点复杂。

我有一个模板,像这样,简化:

<span class="unit">miles</span>

我正在用 jquery 和 ajax 替换一个元素:

$.getJSON('/getunit/', function(data){
   $('#unitHolder').html(data.unit_html);
});

它转到一个视图函数来检索 json 数据(比这个模板更多的数据)。所以我想把它作为 json 来提供,而不仅仅是一个字符串。所以,相关的代码是这样的:

    ...
    context = { 'qs' : queryset }
    data['unit'] = render_to_string('map/unit.html', context)
    data = str(data).replace('\'','"') #json wants double quotes
return HttpResponse(data, mimetype="application/json")

这适用于我们所有的其他数据,但不适用于模板,因为它有双引号,没有转义。我的问题是,如何在 python 中转义一个字符串以用于 json 格式?请注意,render_to_string() 以 unicode 呈现字符串,因此u"<span>...</span>".

我试过了

import json
data['unit'] = json.dumps(render_to_string('map/unit.html', context))

但这给了我"unit": ""<span class=\\"unit\\">miles</span>""

还:

data['unit'] = str(render_to_string('map/unit.html', context)).replace('"','\"')

和:

data['unit'] = str(render_to_string('map/unit.html', context)).replace('"','\\"')

但两者都不能正确地转义双引号。

4

1 回答 1

2

json.dumps直到遇到这个问题,我才尝试过。以前我只是将 python 字典转换为字符串,然后用双引号替换单引号。对于我们传递给客户端的大部分数据,它呈现了正确的 JSON 格式。现在我已经json.dumps在这个问题上尝试过了,我意识到我不需要用strreplace任何东西来转换字典。我可以如下渲染脚本:

    ...
    context = { 'qs' : queryset }
    data['unit'] = render_to_string('map/unit.html', context)
    import json # I'll import this earlier
    data = json.dumps(data)
return HttpResponse(data, mimetype="application/json")

这适用于我传递给 JSON 格式的所有数据,所以效果非常好,这就是我应该一直这样做的方式。

于 2013-06-07T23:35:31.590 回答