题 在外部javascript文件中使用Jinja2模板引擎


我使用Python和Flask进行Web项目。我只是想知道我是否可以在外部javascript文件中访问python发送的参数?它适用于html文件或嵌入在html文件中的js,但是当javascript是extern时则不行。

见下文。

python代码

@app.route('/index')
def index():
    return render_template('index.html', firstArg = 2, secondArg = 3)

index.html代码

...
<body>
    <p>The first arg is {{firstArg}}.</p>
    <script src="index.js"></script>
</body>
...

和index.js文件

window.onload=function(){
    console.log('{{secondArg}}');
};

所以第一个arg在html文件中是正确的,但第二个在js文件中不起作用。浏览器正在显示 Unexpected token {

也许它不可能在外部js中使用它?

否则我需要在html中插入secondArg作为输入数据并在js文件中获取它,但它不是很干净。

如果有人可以提供帮助,谢谢。


18
2018-02-22 15:43


起源




答案:


index.js可能不是由您的烧瓶实例提供的,但它绝对不会被您的模板引擎处理,即使它不会与请求的html具有相同的上下文。

我认为最干净的解决方案是在你的身上有一个启动功能 index.js 并从html文件中调用它:

<body>
    <p>The first arg is {{firstArg}}.</p>
    <script type="text/javascript" src="index.js"></script>
    <script type="text/javascript">
        yourInitFunction({{secondArg}});
    </script>
</body>

你也可以告诉flask路由index.js: @yourapp.route('index.js') 就像你用的那样 route('/index') 但这可能不是一个好主意。


18
2018-02-22 16:35



谢谢。我将通过HTML中的函数调用来采用您的解决方案。我只是有一个问题,路由index.js会有什么影响?我不明白你的意思,我认为这只是路由,我看不到与js文件的链接。 - Loric-
当你添加一个路由时,flask会通过调用修饰函数来处理路由参数的GET-Requests(即后面的函数) app.route())。所以你可以捕获对'index.js'的所有请求,做一些计算并让模板引擎像你的html文件一样呈现javascript文件。 PS:如果你觉得我的回答有帮助,我很感激你接受了。 - t.animal