在外部Javascript中使用Python Flask传递参数

时间:2015-01-13 08:08:06

标签: javascript python flask

我在我的网站上使用Python Flask,并将几个参数传递给Javascript。这是我的代码:

from flask import Flask
from flask import render_template

app = Flask(__name__)


@app.route("/")
def index():

    return render_template("index.html", param1="Hello")


<html>
   <head>
   </head>
   <body>
      <p>Hello World</p>
   </body>
   <script>console.log({{param1}})</script>
</html>

通过这种方式,它可以毫无问题地工作。这个例子是我自己的简化。但是,如果我想将脚本放在外部文件上并像这样调用它:

<html>
   <head>
   </head>
   <body>
      <p>Hello World</p>
   </body>
   <script src="/static/js/myjs.js"></script>
</html>

myjs.js文件是console.log({{param1}}),然后它无法正常工作。那么,有没有办法用Python Flask传递外部Javascript文件中的参数?

2 个答案:

答案 0 :(得分:15)

如果要使用Jinja呈现文件,则需要在其上调用render_template并将其传递给所需的值。只是直接链接到静态文件显然不会这样做。一种解决方案是使用Jinja的include块。这要求&#39; myjs.js&#39;在&#39; templates / js&#39;文件夹,并将其包含在呈现的模板中,将所有模板上下文传递给包含的模板。

<script>{% include 'js/myjs.js' %}</script>

更好解决方案是不要求在每个请求上呈现js,而是将参数传递给模板中的js函数。

<script src="{{ url_for('static', filename='js/myjs.js') }}"></script>
<script>
    my_func({{ my_var|tojson }});
</script>

答案 1 :(得分:0)

我使用了另一种方法加载html页面中指定的javascript文件:

首先,我在background标签内定义了一些变量,因此我调用了我的javascript文件:

<head></head>

这是我的javascript文件内容:

<head>
...
<script src="/static/js/jquery.js"></script>
<script  type=text/javascript>
    $(document).ready(function() {
        $link_subcat = "{{ url_for('load_subcategories') }}";
        $link_cat = "{{ url_for('load_categories') }}";
    });
</script>

<script src="{{ url_for('static', filename='finances.js') }}"></script>
...

这种方法对我有用。