ホームページ > ウェブフロントエンド > jsチュートリアル > Jinja テンプレートから JSON データをレンダリングするときに JavaScript で SyntaxError が発生するのはなぜですか?

Jinja テンプレートから JSON データをレンダリングするときに JavaScript で SyntaxError が発生するのはなぜですか?

Susan Sarandon
リリース: 2024-12-11 21:37:10
オリジナル
452 人が閲覧しました

Why Does My JavaScript Get a SyntaxError When Rendering JSON Data from a Jinja Template?

Jinja テンプレートでレンダリングされたデータで JavaScript が SyntaxError を発生させる

はじめに

JSON データを Flask ルートから Jinja テンプレートに渡すとき、ブラウザーはSyntaxError: Unexpected token '&' をスローします。データをレンダリングするときにプロパティ名が必要です。 JavaScript でレンダリングされた JSON データを処理する方法を理解することは、テンプレートの処理を成功させるために非常に重要です。

エスケープと JSON レンダリング

Flask の Jinja 環境は、セキュリティの脆弱性を防ぐために、HTML テンプレートでレンダリングされたデータを自動的にエスケープします。 JSON として扱う必要があるデータの場合、Flask はデータを JSON にダンプし、安全であるとマークする tojson フィルターを提供します。 tojson フィルターを使用すると、データがエスケープせずにレンダリングされ、JavaScript で正しく解析できるようになります。

tree = get_nodes("Root")
return render_template("folder.html", data=tree|tojson)
ログイン後にコピー
var tree = {{ tree|tojson }};
ログイン後にコピー

あるいは、古い Flask バージョンでは、安全なフィルターを使用して、データを安全なものとして:

var tree = {{ tree|tojson|safe }};
ログイン後にコピー

安全なフィルターを使用

データが安全である場合がすでに JSON にダンプされている場合は、安全なフィルターを使用して、エスケープせずにレンダリングしても安全であるとマークすることができます:

return render_template('tree.html', tree=json.dumps(tree))
ログイン後にコピー
var tree = {{ tree|safe }};
ログイン後にコピー

マークアップで JSON 文字列をラップすることも、安全なフィルターを使用することと同じです。

return render_template('tree.html', tree=Markup(json.dumps(tree)))
ログイン後にコピー
var tree = {{ tree }};
ログイン後にコピー

Jinja での Python データの使用

データがJavaScript には渡されず、Jinja で使用されるため、JSON レンダリングを省略して Python データを直接使用できます:

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

以上がJinja テンプレートから JSON データをレンダリングするときに JavaScript で SyntaxError が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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