同様のフォーラムを見ましたが、どのソリューションも機能しませんでした。変数をflask=からmy Javaスクリプトファイルに渡します。これらの値は、javascriptファイルからPubNubに使用されます。
ここに私のPythonコードの一部があります:
@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'] )
これが私のJavaScriptコード(app.js)の一部です。
var settings = {
channel: {{project_name}},
publish_key: {{publish_key}},
subscribe_key: {{subscribe_key}}
};
このコードは、Settings.htmlファイルで使用し、app.jsファイルでは使用しない場合に機能します。
mobiusklein の回答はかなり良いですが、考慮すべき「ハック」があります。 Javascriptメソッドを定義して、パラメーターを受信し、データをパラメーターとして関数に送信します。
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({{vars|tojson}})
</script>
</head>
</html>
flaskビューからテンプレートへの変数を渡す簡単な方法は、@ mauroが言及した簡単な例を使用してJavaScriptファイルに渡します。
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
}
その理由は、jinja2
を使用して置換を実行する必要がありますが、これはコードからは発生していないようです。
提供している可能性はapp.js
静的ファイルとして。つまり、テンプレートエンジンの機械によって見られることはなく、そのまま提供されることを意味します。
あなたが説明していることを達成するには、app.js
のコンテンツを渡すアクションに関連付けられているURLからapp.js
Flaskのrender_template
関数、実行jinja2
置換、および他のすべてのカスタマイズ情報。ただし、それはjinja2
にはファイル全体を解析するが必要です。
JSONで同じデータを送り返すアクションによって応答されるAJAXリクエストを使用して、これらの変数を渡そうとする場合があります。これは、はるかに一般的な方法であり、他のリソースから見えるデータ。