这更像是一个普通的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('"','\\"')
但是两个都没有正确地脱离双引号。
答案 0 :(得分:2)
在我遇到这个问题之前,我没有尝试json.dumps
。以前我只是将python词典转换为字符串,然后用双引号替换单引号。对于我们传递给客户端的大多数数据,它呈现了正确的JSON格式。既然我已经在这个问题中尝试了json.dumps
,我意识到我不需要使用str
或replace
转换任何字典。我可以按如下方式渲染脚本:
...
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格式的所有数据,因此效果非常好,这就是我应该一直这样做的。