【Flask】PythonからJavaScript(直書き)に値を渡す方法
PythonのFlask ⇒ htmlテンプレートファイルに直書きしたJavaScriptへ値を渡す方法。
JavaScript側で受け取った値を加工してページに表示させます。
やり方
先に結論を書きます。
JavaScriptをhtmlファイルに直書きする場合は、
- x : Python側から受け取った変数名
- y : 受け取ったxをJavaScript側で置き換えた後の変数名
とすると、
var y = {{x|tojson}}
でできる。簡単なサンプルを作りましたので、どうぞ( ゚д゚)ノ
実行後の完成画面
- 上の行がPythonの変数をそのまま表示させたもの。
- 下の行はその変数をJavaScriptで加工して表示させたもの。
目次
実行環境
- Android
- Termux
- Python3.9
- 外部ライブラリ
- Flask
※AndroidとTermuxでやっている意味は特にありません。ぶっちゃけ使いにくい。それが故に嫌でもLinuxコマンドとVimの操作を覚えざるを得ない的な何か。
用意するファイル(2つ)
- app.py(Flaskを動かす用)
- index.html(Webページ表示用)
ディレクトリ構成
. ├── app.py └── templates └── index.html 1 directory, 2 files
htmlテンプレートファイルはtemplates/
フォルダの中に保存しておきます。
実装
app.py(Flask用)
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): text = "こちらFlaskスネーク。応答せよ。" return render_template('index.html', text=text) if __name__ == "__main__": app.run(debug=True, port=8888, threaded=True)
index.html(表示用テンプレート)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>FlaskからJavaScriptに値を渡す</title> </head> <body> <p>{{text}}</p><br> <script> var x = {{text|tojson}}; document.write("(" + x + ")" + " Roger こちらJavaScript。Over。") </script> </body> </html>
◆app.pyのreturnで渡された変数text
をページに表示する場合は、html内に単に{{ text }}
と書けばそのまま表示されます。
◆直書きしたJavaScriptへ値を渡すには、JavaScript中の二重波カッコへtojson
をパイプで繋いで渡す。決まりらしい。
◆変数text
を変数x
に再定義して、document.write(xの加工)
でページに文字列を表示させている。
実行
- ターミナルから
$ python app.py
でFlaskサーバー起動 - ブラウザで
http://localhost:8888
へアクセス
上の画像のような画面がでれば成功。
おわりに
外部JavaScriptファイルへの値の渡し方が分からない。検索でいまいちピンと来るものが出て来ない。需要が無いんだろうか?
それから、JavaScriptからPythonへ値を渡す方法もあとの課題。
以上です。