FlaskでHTMLなHello World!
※この記事はUbuntu 16.04、Python3.5、Flask 0.12.2を前提として記載しています。
この記事に書いてあること
HTMLを返してみる
公式Hello World!は以下のようなコードでした。
hello.py
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!"
"/"にアクセスしたらHello World!という文字列がそのまま返っていました。ということは、ここにそのままHTMLを書いてやれば、HTML版Hello World!ができそうな気がします。
hello_html.py
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "<html><body><h1>Hello World!</h1></body></html>"
Webブラウザで見てみると、こうなります。
当然の結果になりました。
テンプレートエンジンを使う
とはいえ、毎度HTMLをWebアプリケーションのソースコードに埋めるわけにもいきません。
FlaskはJinja*1 2というテンプレートエンジンが統合されています。あらかじめHTMLのテンプレートを別ファイルとして用意しておき、Flaskから呼び出して利用することができます。
テンプレートはhello.pyと同じレベルにtemplatesというディレクトリを作り*2、そこに放り込んでおきます。
templates/base.html
<!DOCTYPE html> <html lang="jp"> <head> <title>{{ title }}</title> <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> </head> <body> {% block content %} {% endblock %} </body> </html>
templates/hello.html
{% extends "base.html" %} {% block content %} <h1>{{ message }}</h1> {% endblock %}
hello_template.py
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def hello(): return render_template("hello.html", title="Flask Page", message="Hello World!")
動かして、Webブラウザで結果を見てみましょう。
できたページのソースコードを表示すると、以下のようになります。
<!DOCTYPE html> <html lang="jp"> <head> <title>Flask Page</title> <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> </head> <body> <h1>Hello World!</h1> </body> </html>
Python上で設定したパラメータが反映されて、ちょっとWebアプリケーションっぽい雰囲気が出てきました。