LoginSignup
72
71

More than 5 years have passed since last update.

はじめての Flask #3 ~htmlをrenderしてみよう~

Last updated at Posted at 2018-09-05

前回: ~POSTを受け取ろう~

今回は、htmlファイルを用意してそれをブラウザに表示させてみましょう!

前回までは、return で文字列として返していましたが、醜いですし、扱いづらいですよね。

今回からは render_template を使います!

ファイル構成

まず

root/
|__main.py
|__templates/
      |__mainpage.html
      |__name.html

という形にファイルとフォルダを作ってください。

はじめてのrender

main.pyを

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.htmlname.htmlをそれぞれ

mainpage.html
<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
    this is the main page
    </body>
</html>
name.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もこう書き換えましょう

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はここですので、気になった方は閲覧してみてください。

次回はデータベースをいじってみましょう!

72
71
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
71