ホームページ > バックエンド開発 > Python チュートリアル > Jinja テンプレートで JSON を解析するときに発生する「SyntaxError: Unexpected token '&'」を解決する方法

Jinja テンプレートで JSON を解析するときに発生する「SyntaxError: Unexpected token '&'」を解決する方法

Mary-Kate Olsen
リリース: 2024-12-20 10:13:16
オリジナル
274 人が閲覧しました

How to Resolve

Jinja テンプレートで JSON データをレンダリングするときの JavaScript SyntaxError の解決

Jinja テンプレートでレンダリングされた JavaScript コードを通じて JSON データを反復処理しようとすると、「SyntaxError」が発生する場合があります。 : JSON.parse() の呼び出し時に予期しないトークン '&' エラーが発生しました。このエラーは、HTML テンプレートでレンダリングするときに Flask の Jinja 環境によるデータの自動エスケープが原因で発生します。

解決策: tojson フィルターを使用します

このエスケープ プロセスを防止し、JavaScript でデータを JSON として処理するには, Flask は tojson フィルターを提供します。 Python オブジェクトを JSON に変換し、テンプレートでレンダリングしても安全であるとマークします。

return render_template("tree.html", tree=tree)
ログイン後にコピー
ログイン後にコピー
<script>
  var tree = {{ tree|tojson }};
</script>
ログイン後にコピー

非 JSON データの処理

JSON データを扱っていない場合、またはすでに文字列に変換されている場合は、安全なフィルターを使用するか、文字列をマークアップでラップして、文字列を防ぐことができます。エスケープ:

return render_template("tree.html", tree=json.dumps(tree))
ログイン後にコピー
<script>
  var tree = {{ tree|safe }};
  // or
  var tree = {{ Markup(json.dumps(tree)) }};
</script>
ログイン後にコピー

生データの受け渡し

データを JavaScript に渡すのではなく、Jinja テンプレート自体内で使用する場合は、tojson フィルターを省略して次を使用できます。生の Python データを直接使用します。

return render_template("tree.html", tree=tree)
ログイン後にコピー
ログイン後にコピー
{% for item in tree %}
  <li>{{ item }}</li>
{% endfor %}
ログイン後にコピー

これらの手法を実装することで、レンダリングされた JSON を効果的に使用できます。 SyntaxError の問題が発生することなく、JavaScript でデータを作成できます。

以上がJinja テンプレートで JSON を解析するときに発生する「SyntaxError: Unexpected token '&'」を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート