如何在 django webapp 中安全地渲染 JSON 数据?
在 django 的服务器上,我生成 JSON 数据,然后在 django 模板中呈现该 JSON 数据。JSON 有时包含 html 片段。大多数时候,这很好,但是如果</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>
何时将模板数据传递给模板,但我觉得有更好的方法。