私たちには、外部JavaScriptファイルを含むサーバー側レンダリングHTMLページがあります。そのファイル内のコードをトリガーするために、我々は関数を呼び出すと、(JSONの形式で)いくつかの動的なデータを渡したい:Nunjucksを使用して安全にJSONをインライン<script>にレンダリングする方法はありますか?
<script src="/static/foo/bar.js"></script>
<script>
foo.bar.init({biz: 42, qux: "quux"});
</script>
我々はNunjucksテンプレートからこれをレンダリングすると、JSONオブジェクトを渡しています文脈で値data
として。これには、ユーザー提供のコンテンツを含む任意のデータを含めることができます。
<>&
は(Nunjucksの自動エスケープのおかげで)エスケープされているので、これは、安全であるが、動作しません:
foo.bar.init({{ data | dump }});
これは動作しますが、JSONの文字列がテキスト</script>
が含まれている可能性があるため、安全ではありません:
foo.bar.init({{ data | dump | safe }});
NunjucksがこのJSONをレンダリングして安全に正しく解釈できるようにする方法を教えてください。解決しなければならない問題のように聞こえますが、私はどこでもプレミアソリューションを見つけることができません。