Passing variables from Flask to JavaScript
I looked at similar forums but was not able to get any of the solutions to work. I am trying to pass variables from Flask to my JavaScript file. These values then will be used for PubNub from my JavaScript file.
Here is part of my Python code:
@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'] )
Here is part of my JavaScript code (app.js):
var settings = {
channel: {{project_name}},
publish_key: {{publish_key}},
subscribe_key: {{subscribe_key}}
};
this code works if I use it in my Settings.html file but not in the app.js file.
Solution 1:
The mobiusklein answers is pretty good, but there is "hack" you should consider. Define your Javascript method to receive params and send data as params to your function.
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({{data|tojson}})
</script>
</head>
</html>
Solution 2:
Simple way to pass variables from flask view to template to javascript file with simple example mentioned by @mauro.
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
}