2017-01-26 10 views
0

フラスコのアプリケーションをビルドしていて、特定のパラメータを追跡するために、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> 

が、私は以下を参照してください。

[&#39;Michael&#39;] 

アンパサンド#39がありますASCIIアポストロフィーの文字エンコード。私は(console.log({{ name }})のように見えた)上記にconsole.logステートメントから、アポストロフィ(一重引用符)を省略した場合、私は次のエラーを取得する:

Uncaught SyntaxError: Unexpected token &

私は<script>タグ以外の場所に変数を印刷する際に奇妙なことがあります正常に動作します。

何が問題なのか、どのように修正できますか?

答えて

1

有効なJSONオブジェクト/リストを取ると、このように、神社内のjavascriptの使用中にtojsonフィルタを、それを使用したい場合:

console.log({{ name|tojson }}); 

tojsonフィルタもsafeとして値をマークしますので、自動無効化エスケープする。

+0

'name'は辞書ではないリストです。 jsonフィルターを使用するのはなぜですか?これは私が 'tojson'、' safe'、またはその両方を使うかどうかに関係しています。どちらか一方または両方を使用する方が良いですか? jinja2のドキュメントに基づいて '安全な'が 'tojson'に組み込まれているようです –

+1

はい...私はこのトリックを学んだ後に新しい追加かもしれないと思っています;)技術的には正規のJSONです。それ。これは助けてくれてうれしいです。 'tojson'だけを使って答えを更新します – abigperson

関連する問題