2017-01-26 133 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