SWELL公式サイトへ 詳しくはこちら

Flask_Vol4:テンプレートとJinja2

  • URLをコピーしました!

Flaskで動的HTMLを生成しよう:テンプレートエンジンJinja2の基本

目次

はじめに

前回のFlask_Vol3では、ルーティングの基本を学び、文字列だけを返す簡単なアプリを作成しました。今回は、WebサイトらしいHTMLページを動的に生成するために、Flaskが標準で利用しているテンプレートエンジン「Jinja2」を学びましょう。

Jinja2を使うことで、Pythonの変数やリストをHTMLテンプレートに挿入し、条件分岐やループ処理など、柔軟な動的コンテンツを簡単に扱えるようになります。

1. テンプレートディレクトリの配置

Flaskでは、デフォルトでtemplates というフォルダにHTMLファイルを配置する習慣があります。たとえば、以下のようなディレクトリ構成を想定してください。


flask_project/
  ├─ app.py
  ├─ venv/
  └─ templates/
       └─ index.html

  • app.py : Flaskアプリのメインコード
  • templates/ : HTMLテンプレートを配置するディレクトリ
  • index.html : 今回の演習で使用するテンプレートファイル

このように置くことで、Flask側の render_template("index.html") 呼び出しがスムーズに行えます。

2. テンプレートのレンダリング

📝render_template() の基本的な使い方

Flaskアプリ内でテンプレートを呼び出すには、flask モジュールからインポートできる**render_template** 関数を使います。

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("index.html")
  • render_template("index.html") と書くと、templates/index.html を探して、その内容をブラウザに返します。
  • 今回は index.html のみですが、別のファイルを作れば render_template("about.html") なども可能です。

📝テンプレートへ変数を渡す

たとえば、サーバサイドで作成したデータをテンプレートへ渡したい場合、以下のようにキーワード引数として指定します。

@app.route("/hello")
def hello():
    name = "Alice"
    return render_template("hello.html", user_name=name)

ここで user_name は、テンプレート側で使われる変数名です。Flaskはこの「渡されたデータ」をテンプレートに挿入して表示できます。

3. Jinja2の文法

FlaskのテンプレートはJinja2というテンプレートエンジンで書かれています。主な文法を紹介します。

📝3.1 変数の埋め込み


{{ 変数名 }}

を使うと、Python側から渡された値をHTMLに表示できます。

💡例)Hello.html

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Hello Page</title>
</head>
<body>
  <h1>こんにちは、{{ user_name }}さん!</h1>
</body>
</html>

Flaskで render_template("hello.html", user_name="Alice") を呼び出すと、

こんにちは、Aliceさん! と表示されます。

📝3.2 制御構文(if文、for文など)

💡if構文

{% if user_name %}
  <p>{{ user_name }} さんがログイン中です。</p>
{% else %}
  <p>ゲストユーザーです。</p>
{% endif %}
  • {% if %}{% endif %} の間に条件分岐で表示するHTMLを置けます。
  • Pythonの if と同じ要領で書くので分かりやすいです。

💡for構文

<ul>
{% for item in items %}
  <li>{{ item }}</li>
{% endfor %}
</ul>
  • items がリストの場合、リストの要素を1つずつ <li> タグで表示します。
  • Pythonの for と同じイメージで書けますが、コロン(:)の代わりに {% endfor %} でブロックを閉じます。

💡コメント

Jinja2内でコメントを入れたいときは、 {# ... #} で囲みます。

4. 簡単なサンプルを作ってみよう

📝4.1 テンプレート(index.html

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Flask with Jinja2</title>
</head>
<body>
  <h1>リストの内容を表示します</h1>
  <p>ユーザー名: {{ username }}</p>

  {% if usernames_list %}
    <ul>
      {% for name in usernames_list %}
        <li>{{ name }}</li>
      {% endfor %}
    </ul>
  {% else %}
    <p>表示できるユーザー名がありません。</p>
  {% endif %}
</body>
</html>

このテンプレートでは、以下の変数を使っています。

  • username : 単独のユーザー名
  • usernames_list : 複数のユーザー名を格納したリスト

📝4.2 Flask側のコード(app.py

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def index():
    username = "Alice"
    user_list = ["Bob", "Charlie", "Diana"]

    return render_template(
        "index.html",
        username=username,
        usernames_list=user_list
    )

if __name__ == "__main__":
    app.run(debug=True)

このように render_template に対してキーワード引数を付けることで、テンプレートファイルに必要な変数を渡します。

📝4.3 動作確認

  1. 仮想環境を有効にして、ターミナルで python app.py を実行(venv\Scripts\activate または.\venv\Scripts\Activate.ps1など)
  2. ブラウザで http://127.0.0.1:5000/ にアクセス
  3. 「リストの内容を表示します」という見出しがあり、ユーザー名「Alice」とリストの各要素(Bob, Charlie, Diana)が <li> タグで表示されていれば成功

まとめ

📝ゴール

  1. FlaskとHTMLテンプレートを連携し、動的なページを作成できる
    • render_template() を使って templates フォルダにあるHTMLファイルを返し、ブラウザに表示させる流れを体験しました。
    • HTMLに埋め込む形でデータを渡せるので、より「Webアプリケーションらしい」構造になります。
  2. 変数やリストをテンプレートに渡す方法を理解する
    • 変数埋め込み {{ variable }}、制御構文 {% if %}, {% for %} など、Jinja2の基本を押さえました。
    • これを使って、条件分岐やループ表示など、豊富な表現が可能になります。

次回は、ユーザが入力したデータをサーバに送って、それを再度画面に反映する方法について解説します。フォームを使った入力とPOSTメソッドの扱いなど、いよいよWebアプリの本質的な部分に踏み込みます。

プログラミング初心者におすすめ!「スッキリわかるPython入門 第2版」

プログラミングに興味があるけれど、何から始めればいいかわからない方に最適な一冊が「スッキリわかるPython入門 第2版」です。以下のポイントを参考にしてください。

本書の特徴とメリット

  • シリーズ累計90万部突破
    多くの読者に支持され、信頼されている大人気入門書の改訂版。
  • 初心者でもわかりやすい解説
    基本的な「コツ」を丁寧に説明し、迷わず学習を進められます。
  • 実践的な「しくみ」の理解
    プログラミングの基礎だけでなく、実際の開発に役立つ知識を習得可能。
  • 「落とし穴」の回避
    初心者が陥りがちな間違いをカバーし、安心して学習を進められる内容。

実際の読者の声

  • 現役プログラミング教室の先生も推薦!
    「この本を読んでPCスキルをマスターすれば、それでメシを食えますよ」という評価もあるほどの内容。面白くて勉強になるとの声が多い。

この機会に「スッキリわかるPython入門 第2版」を手に入れ、プログラミングの世界に一歩踏み出しましょう。下のリンクをクリックして、詳細をチェックしてみてください!

よかったらシェアしてね!
  • URLをコピーしました!
目次