フラスコのアプリケーションをビルドしていて、特定のパラメータを追跡するために、Pythonのバックエンドで作成した変数をフロントエンドのjavascriptに渡す必要があります。しかし、私は奇妙なエンコーディングの問題に直面しています。ここでは、Pythonのバックエンド、レンダリングされたJinja2テンプレートのフロントエンド、Chromeコンソールに表示されるエラーの概要を示します。フラスコ:javascriptに変数を渡すときにエラーが発生しました
app.py:
@app.route('/')
def send_name():
name = ["Michael"]
return render_template('index.html', name=name)
のindex.html:私はコンソールを開くと
<html>
<script>
console.log('{{ name }}')
</script>
</html>
が、私は以下を参照してください。
['Michael']
アンパサンド#39がありますASCIIアポストロフィーの文字エンコード。私は(console.log({{ name }})
のように見えた)上記にconsole.logステートメントから、アポストロフィ(一重引用符)を省略した場合、私は次のエラーを取得する:
Uncaught SyntaxError: Unexpected token &
私は<script>
タグ以外の場所に変数を印刷する際に奇妙なことがあります正常に動作します。
何が問題なのか、どのように修正できますか?
'name'は辞書ではないリストです。 jsonフィルターを使用するのはなぜですか?これは私が 'tojson'、' safe'、またはその両方を使うかどうかに関係しています。どちらか一方または両方を使用する方が良いですか? jinja2のドキュメントに基づいて '安全な'が 'tojson'に組み込まれているようです –
はい...私はこのトリックを学んだ後に新しい追加かもしれないと思っています;)技術的には正規のJSONです。それ。これは助けてくれてうれしいです。 'tojson'だけを使って答えを更新します – abigperson