[解決済み] PythonからJinja2を使ってJavaScriptにリストを渡す方法
2023-04-16 07:49:53
質問
Pythonの変数があるとします。
list_of_items = ['1','2','3','4','5']
という関数があり、HTMLをレンダリングしてJinjaに渡しているのですが、JavaScriptでも
somefunction(variable)
. の各項目を渡そうとしているのですが
list_of_items
. 私はこのようなものを試してみました。
{% for item in list_of_items %}
<span onclick="somefunction({{item}})">{{item}}</span><br>
{% endfor %}
PythonからJavaScriptにリストを渡すことは可能ですか?それとも、ループでリストの各項目を1つずつ渡すべきですか?どうすればいいのでしょうか?
どのように解決するのですか?
javascriptのコードにコンテキストデータを渡すには、javascriptが理解できる方法でシリアライズする必要があります(つまりJSON)。また、このデータを安全なものとしてマークするには
safe
Jinjaフィルターを使って、データがhtmlescapedされるのを防ぐために、安全であるとマークする必要もあります。
というようなことをすれば実現できます。
ビュー
import json
@app.route('/')
def my_view():
data = [1, 'foo']
return render_template('index.html', data=json.dumps(data))
テンプレート
<script type="text/javascript">
function test_func(data) {
console.log(data);
}
test_func({{ data|safe }})
</script>
編集 - 正確な答え
ですから、あなたが望むこと(アイテムのリスト上でループし、それらをjavascript関数に渡す)を正確に達成するためには、リスト内の各アイテムを別々にシリアライズする必要があります。あなたのコードは次のようになります。
ビュー
import json
@app.route('/')
def my_view():
data = [1, "foo"]
return render_template('index.html', data=map(json.dumps, data))
テンプレート
{% for item in data %}
<span onclick=someFunction({{ item|safe }});>{{ item }}</span>
{% endfor %}
編集2
この例では
Flask
あなたがどのようなフレームワークを使用しているかは知りませんが、アイデアを得たのですから、使用するフレームワークに適合するようにすればよいのです。
編集3 (セキュリティ警告)
ユーザが提供したデータでこれを行うことは決してありません。信頼できるデータでのみ行ってください!
さもなければ、あなたのアプリケーションをXSSの脆弱性にさらしてしまうことになります!
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] JSのDateからDay名
-
[解決済み] javascriptで2つの数値を連結する方法は?
最新
-
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によるタッチスクリーンデバイスの検出
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)