2017-01-26 81 views
0

我正在構建一個瓶子應用程序,我需要將前端上的python後端創建的變量傳遞給javascript以跟蹤某些參數。但是,我遇到了一個奇怪的編碼問題,下面是一個示例,其中概述了python後端,Jinja2模板前端以及Chrome控制檯中顯示的錯誤。flask:錯誤將變量傳遞給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字符編碼爲一個apostrophre。如果我忽略從上面的console.log語句(它看起來像console.log({{ name }}))撇號(單引號),我收到以下錯誤:

Uncaught SyntaxError: Unexpected token &

最奇怪的是,當我在任何地方打印變量<script>標籤外面工作正常。

任何想法是什麼問題,我該如何解決它?

回答

1

,如果你想採取一個有效的JSON對象/列表和神社內的JavaScript中使用中使用它的tojson過濾器,像這樣:

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

tojson過濾器也標誌着值safe所以禁用自動逃跑。

+0

'name'是一個不是字典的列表。爲什麼我們允許使用json過濾器?這對我的工作是否我使用'tojson','安全',或兩者,謝謝!使用其中一種還是其他或兩種都更好?基於jinja2文檔它似乎'安全'內置到'tojson' –

+1

是的...我認爲這可能是一個新的額外的東西,我知道這個技巧之後;)技術上,一個列表是有效的JSON,雖然通常不是我們如何思考它。很高興這有幫助。會根據只使用'tojson'來更新答案 – abigperson