Question
I working on a web project using Python and Flask. I was just wondering if I can access parameters sent by python in my external javascript files? It's working well with html files or with js embedded in html files but not when javascript is extern.
See below.
The python code
@app.route('/index')
def index():
return render_template('index.html', firstArg = 2, secondArg = 3)
The index.html code
...
<body>
<p>The first arg is {{firstArg}}.</p>
<script src="index.js"></script>
</body>
...
And the index.js file
window.onload=function(){
console.log('{{secondArg}}');
};
So the first arg is correct within the html file but the second doesn't work
in the js file. The browser is showing Unexpected token {
.
Maybe it's not possible to use it in external js?
Otherwise I would need to insert the secondArg as an input data in html and get it within the js file but it's not very clean.
If someone can help, thanks.
Answer
The index.js is probably not served by your flask instance, but it is most definitely not processed by your templateing engine and even if it would it would not have the same context as the html it is requested for.
I think the cleanest solution would be to have an initiation function in your
index.js
and call it from the html file:
<body>
<p>The first arg is {{firstArg}}.</p>
<script type="text/javascript" src="index.js"></script>
<script type="text/javascript">
yourInitFunction({{secondArg}});
</script>
</body>
You also could tell flask to route the index.js, too:
@yourapp.route('index.js')
just like you did with the route('/index')
however this is probably not a very good idea.