django WebアプリケーションでJSONデータを安全にレンダリングするにはどうすればよいですか?安全にDjangoテンプレートのJSON内でJSONをhtmlで使用する
djangoのサーバーでJSONデータを生成し、そのJSONデータをdjangoテンプレートでレンダリングします。 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はすべて壊れます。
可能な解決策の1つは、テンプレートデータをテンプレートに渡すときに</script>
をチェックすることですが、より良い方法があるように感じます。
あなたは(AJAX経由)JSONとしてそれを提供することができたりjavascriptファイルとして提供します(スクリプトタグを使用して組み込みます)。 – DanielB