今回は、htmlファイルを用意してそれをブラウザに表示させてみましょう!
前回までは、return で文字列として返していましたが、醜いですし、扱いづらいですよね。
今回からは render_template を使います!
ファイル構成
まず
root/
|__main.py
|__templates/
|__mainpage.html
|__name.html
という形にファイルとフォルダを作ってください。
はじめてのrender
main.pyを
from flask import *
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def main_page():
return render_template("mainpage.html")
@app.route("/<name>", methods=["GET", "POST"])
def namepage(name):
return render_template("name.html")
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=8888, threaded=True)
として、mainpage.htmlとname.htmlをそれぞれ
<!DOCTYPE html>
<html>
<head>
</head>
<body>
this is the main page
</body>
</html>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
this is the name page
</body>
</html>
とでもしておいて下さい。
さて、この状態でmain.pyを実行し、
http://localhost:8888/
と
http://localhost:8888/<何か好きな文字>
に接続してみてください。それぞれ
this is the main page
this is the name page
と表示されているでしょうか。
このようにして、htmlファイルを出力することができます。
htmlファイルを動的に返す
htmlのrenderにはjinja2というものが使われており、中でPythonのコードを実行することができます。
値を渡すには、render_templateにキーワード引数として入力すればよいです。
namepageをこう書き換えてください。
@app.route("/<name>", methods=["GET", "POST"])
def namepage(name):
return render_template("name.html", name=name)
そして、name.htmlもこう書き換えましょう
<!DOCTYPE html>
<html>
<head>
</head>
<body>
hello, {{name}}
</body>
</html>
( 二重波括弧 {{}} )内がPythonのコードとして評価されます。
localhost:8888/python
に接続すると hello, python
となりますね。
このように、render_templateを使って、ファイルとしてのhtmlを出力できます。
for文 や while文、ほかのhtmlファイルの読み込みなどたくさんのことができますが、あまりにもできることが多いので、それはまたの機会にします。
Documentはここですので、気になった方は閲覧してみてください。