[解決済み] テンプレートでFlaskからJavaScriptにデータを渡すにはどうしたらいいですか?
2022-04-28 15:57:02
質問
私のアプリは、辞書を返すAPIに呼び出しを行います。この辞書からビュー内のJavaScriptに情報を渡したいのです。私は特にJSでGoogle Maps APIを使用しているので、私はそれにlong/lat情報を持つタプルのリストを渡したいと思っています。私が知っているのは
render_template
はこれらの変数をビューに渡して HTML で使用できるようにしますが、テンプレートの JavaScript に渡すにはどうしたらよいでしょうか。
from flask import Flask
from flask import render_template
app = Flask(__name__)
import foo_api
api = foo_api.API('API KEY')
@app.route('/')
def get_data():
events = api.call(get_event, arg0, arg1)
geocode = event['latitude'], event['longitude']
return render_template('get_data.html', geocode=geocode)
解決方法は?
を使用することができます。
{{ variable }}
HTML部分だけでなく、テンプレート内のどこにでも。だから、これでうまくいくはずです。
<html>
<head>
<script>
var someJavaScriptVar = '{{ geocode[1] }}';
</script>
</head>
<body>
<p>Hello World</p>
<button onclick="alert('Geocode: {{ geocode[0] }} ' + someJavaScriptVar)" />
</body>
</html>
2段階のプロセスとして考えてください。まず、Jinja (Flask が使用するテンプレートエンジン) があなたのテキスト出力を生成します。これはユーザーに送られ、ユーザーは見たとおりのJavaScriptを実行します。もしFlaskの変数を配列としてJavaScriptで利用したいのであれば、出力に配列の定義を生成しなければなりません。
<html>
<head>
<script>
var myGeocode = ['{{ geocode[0] }}', '{{ geocode[1] }}'];
</script>
</head>
<body>
<p>Hello World</p>
<button onclick="alert('Geocode: ' + myGeocode[0] + ' ' + myGeocode[1])" />
</body>
</html>
JinjaはPythonからさらに高度な構成も提供しているので、短くすることもできます。
<html>
<head>
<script>
var myGeocode = [{{ ', '.join(geocode) }}];
</script>
</head>
<body>
<p>Hello World</p>
<button onclick="alert('Geocode: ' + myGeocode[0] + ' ' + myGeocode[1])" />
</body>
</html>
を使用することもできます。
for
のループになります。
if
ステートメント、その他多数があります。
Jinja2 ドキュメント
をご覧ください。
また、Ford の回答で
tojson
フィルタに追加されます。
Jinja2 の標準的なフィルターセット
.
2018年11月編集
tojson
が Jinja2 の標準フィルターセットに含まれるようになりました。
関連
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
vueの補間表現とv-textディレクティブの違いについて
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JavaScriptの関数この指摘の問題を説明
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
vueにおけるv-forループオブジェクトのプロパティ
-
Vueのイベント処理とイベントモディファイアの解説
-
[解決済み】awaitは非同期関数でのみ有効です。
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
[解決済み】エラー。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりませんでした。
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ