【发布时间】:2012-12-26 18:20:45
【问题描述】:
如何在 django webapp 中安全地渲染 JSON 数据?
在 django 的服务器上,我生成 JSON 数据,然后在 django 模板中呈现该 JSON 数据。 JSON 偶尔包含 html 的 sn-ps。大多数时候,这很好,但是如果 </script> 标记在呈现时位于 JSON 数据中,它会破坏周围的 javascript。
例如...
在服务器上,在 python 中我会有这个:
template_data = {
'my_json' : '[{"my_snippet": "<b>Happy HTML</b>"}]'
}
# pass the template data to the django template
return render_to_response('my_template.html', template_data, context_instance = c)
然后在模板中:
<script type="text/javascript">
var the_json = {{my_json|safe}};
</script>
... some html ...
生成的 html 工作正常,如下所示:
<script type="text/javascript">
var the_json = [{"my_snippet": "<b>Happy HTML</b>"}];
</script>
... some html ...
但是,当 JSON 在服务器上看起来像这样时,您会遇到问题:
template_data = {
'my_json' : '[{"my_snippet": "Bad HTML</script>"}]'
}
return render_to_response('my_template.html', template_data, context_instance = c)
现在,当它被渲染时,你会得到:
<script type="text/javascript">
var the_json = [{"my_snippet": "Bad HTML</script>"}];
</script>
... some html ...
JSON 代码中的关闭脚本标记被视为关闭整个脚本块。然后你的所有 javascript 都会中断。
一种可能的解决方案是在将模板数据传递给模板时检查</script>,但我觉得有更好的方法。
【问题讨论】:
-
您可以将其作为 json(通过 AJAX)提供或作为 javascript 文件提供(然后使用脚本标签包含它)。
标签: javascript python html django