将变量从flask传递给javascript

时间:2016-05-16 17:28:37

标签: javascript python flask pubnub

我查看了类似的论坛,但无法获得任何解决方案。我试图将变量从flask传递到我的java脚本文件。然后,这些值将用于我的javascript文件中的PubNub。

以下是我的Python代码的一部分:

@app.route("/mysettings/")
def user_settings(): 
        return render_template('Settings.html',  project_name = session['project_name'] , publish_key = session['publish_key'] , subscribe_key = session['subscribe_key'] )

以下是我的javascript代码(app.js)的一部分:

var settings = {
        channel: {{project_name}},
        publish_key: {{publish_key}},
        subscribe_key: {{subscribe_key}}
    };

如果我在我的Settings.html文件中使用它而不是在app.js文件中,则此代码有效。

4 个答案:

答案 0 :(得分:20)

mobiusklein答案非常好,但你应该考虑“黑客”。定义您的Javascript方法以接收参数并将数据作为参数发送到您的函数。

<强> main.py

@app.route('/')
def hello():
    data = {'username': 'Pang', 'site': 'stackoverflow.com'}
    return render_template('settings.html', data=data)

<强> app.js

function myFunc(vars) {
    return vars
}

<强> settings.html

<html>
    <head>
         <script type="text/javascript" {{ url_for('static', filename='app.js')}}></script>
         <script type="text/javascript">
            myVar = myFunc({{vars|tojson}})
         </script>
    </head>
</html>

答案 1 :(得分:16)

使用@mauro提到的简单示例,将变量从flask视图传递到模板到javascript文件的简单方法。

<强> main.py

@app.route('/')
def hello():
    data = {'username': 'Pang', 'site': 'stackoverflow.com'}
    return render_template('settings.html', data=data)

<强> settings.html

<html>
    <head>
         <script type="text/javascript">
            var username = {{ data.username }}
            var site = {{ data.site }}
        </script>
        <script type="text/javascript" src="app.js"></script>
    </head>
</html>

<强> app.js

function myFunc() {
    return username + site
}

答案 2 :(得分:2)

原因是jinja2需要用来执行替换,而代码似乎没有发生。

您有可能将app.js作为静态文件提供服务,这意味着模板引擎机器永远不会查看它,只是按原样使用。

您可以通过从与app.js通过Flask&#39; app.js传递内容的操作相关联的网址提供render_template来完成您所描述的内容。函数,执行jinja2替换以及所有其他自定义信息,但这意味着jinja2必须解析整个文件,这可能很昂贵。

您可能尝试使用通过在JSON中发回相同数据的操作响应的AJAX请求来传递这些变量。这是一种更常见的做法,并且具有使这些数据对其他资源可见的附加价值。

答案 3 :(得分:1)

<script type="text/javascript">
   var username ='{{ data.username }}'
   var site ='{{ data.site}}'
<script>