テンプレートをレンダリングする
このステップでは、Jinja2 テンプレートエンジンを使ってテンプレートレンダリングを実装します。
rendering_templates.py ファイルを開き、まず Flask クラスと render_template をインポートします。その後、Flask クラスのインスタンスを作成します。
from flask import Flask, render_template
app = Flask(__name__)
次に、route() デコレータを使って、共有する 1 つのビュー関数 hello 用の 2 つのルート / と /<name> を作成します。テンプレートをレンダリングするには、render_template() メソッドを使うことができます。これは、Flask によって提供され、Jinja2 テンプレートエンジンを使ってテンプレートをレンダリングするためのものです。必要なことは、テンプレートの名前 と、キーワード引数としてテンプレートエンジンに渡したい 変数 を提供するだけです。ビュー関数では、render_template() メソッドを使って、name という変数を持つ hello.html テンプレートをレンダリングします。
@app.route('/')
@app.route('/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
スクリプトの main エントリポイントを作成して、Flask アプリケーションをポート(例えば port=5000)で起動します。その後、debug モードを有効にします。
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
Flask は、デフォルトで templates フォルダ内を探してテンプレートを探します。そのため、templates という名前のフォルダを作成し、そのフォルダの下に hello.html という名前のファイルを作成する必要があります。端末で次のコマンドを実行することで、必要なフォルダとファイルを作成できます。
cd ~/project
mkdir templates
cd templates
touch hello.html
templates/hello.html ファイルを開き、次のコードを書きます:
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
上記のコードは、Jinja2 の 条件分岐ブロック を使っています。これは、name 変数が真偽値(None でも空でもない)であるかどうかを確認します。もしそうなら、Hello {{ name }}! の内容が表示されます。そうでなければ、Hello, World! の内容が表示されます。
アプリケーションを実行するには、まず端末で次のコマンドを使って Flask アプリケーションを起動します:
cd ~/project
python3 rendering_templates.py
次に、インターフェイス上部にある "Web 5000" タブを開き、インターフェイスを更新します。すると、Hello, World! が表示されるページが見えるはずです。
ルート /<name> の場合、URL バーに直接接尾辞を追加することができます。たとえば、ポート 5000 の URL バーに接尾辞 flask を入力すると、出力として Hello, flask! が表示されます。
URL バーに異なる /<name> パスを試してみると、出力も対応して変化します。