2014-02-22 51 views
17

我使用Python和Flask开发Web项目。我只是想知道如果我可以在我的外部JavaScript文件中访问由python发送的参数?它可以很好地处理html文件或嵌入在html文件中的js,但当javascript是extern时不会。在外部JavaScript文件中使用Jinja2模板引擎

见下文。

的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}}'); 
}; 

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

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

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

如果有人可以帮忙,谢谢。

回答

18

index.js可能不是由你的瓶子实例服务的,但它绝对不是你的模板引擎处理的,即使它不会与请求的html有相同的上下文。

我认为最干净的解决办法是有一个起始功能在您index.js并从HTML文件调用它:只是@yourapp.route('index.js')

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

你也可以告诉烧瓶路线index.js,太就像你对route('/index')所做的那样,但这可能不是一个好主意。

+0

谢谢。我将采用您的解决方案,并从HTML中调用函数。我只是有一个问题,路由index.js会产生什么影响?我不明白你的意思,我认为这只是路由,我看不到与js文件的链接。 –

+0

当你添加一个路径瓶时,通过调用装饰函数(即'app.route()'后面的函数)来处理GET-Requests到路由的参数。因此,您可以将所有请求都捕获到'index.js',做一些计算并让模板引擎像HTML文件一样呈现JavaScript文件。 PS:如果您发现我的答案有用,我将不胜感激您接受它。 –