Jinja2の使い方
Jinja2はFlaskで使用されるテンプレートエンジンであり、HTMLファイルの中でPythonコードを埋め込み、動的にページを生成することができます。この節では、基本的なJinja2の使い方について学びます。
Jinja2とは
Jinja2は、テンプレートファイル(通常はHTML)にPythonの変数や制御構造を埋め込むことができるテンプレートエンジンです。Flaskでは、このJinja2を用いて動的なWebページを簡単に作成することができます。
FlaskでのJinja2テンプレートの使用
Flaskでは、render_template
関数を使用して、HTMLテンプレートファイルをレンダリングします。次に、Flaskの基本的なルーティングとともにJinja2を使って変数をテンプレートに渡す方法を解説します。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
# テンプレートに渡すデータ
data = {
"title": "ようこそ、Flaskアプリへ",
"description": "これはFlaskとJinja2を使ったシンプルなアプリケーションです。",
"items": ["アイテム1", "アイテム2", "アイテム3"]
}
# index.htmlをレンダリングし、変数dataをテンプレートに渡す
return render_template('index.html', data=data)
if __name__ == '__main__':
app.run(debug=True)
Jinja2テンプレートの作成
次に、Jinja2テンプレートファイル(index.html)の作成方法を説明します。このテンプレートでは、Flaskから渡されたデータを表示します。
<!-- templates/index.html - Jinja2テンプレートファイル -->
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ data.title }}</title>
</head>
<body>
<h1>{{ data.title }}</h1>
<p>{{ data.description }}</p>
<h2>アイテム一覧</h2>
<ul>
<!-- itemsリストをループして表示 -->
{% for item in data.items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
</body>
</html>
Jinja2の構文
Jinja2の構文は、Pythonコードを埋め込むために次のような特殊なタグを使用します。
構文 | 説明 |
---|---|
{{ 変数 }} |
変数の値を表示します。 |
{% if 条件 %} ... {% endif %} |
条件分岐を行います。 |
{% for item in items %} ... {% endfor %} |
リストなどをループ処理します。 |
変数の表示
Jinja2では、{{ }}
を使用して、Pythonの変数をテンプレート内に表示することができます。
{{ data.title }} <!-- Flaskから渡された変数dataのtitleを表示 -->
条件分岐とループ処理
Jinja2では、制御構造を使って条件分岐やループ処理を行うことができます。{% %}
を使用してif文やfor文を記述します。
{% if data.items %}
<ul>
{% for item in data.items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% else %}
<p>アイテムがありません。</p>
{% endif %}
まとめ
今回の記事では、Flaskで使用されるJinja2テンプレートエンジンの基本的な使い方について説明しました。Jinja2を使うことで、動的なWebページを簡単に作成でき、変数の表示、条件分岐、ループなどの制御構造を簡潔に記述できます。次に学ぶステップとしては、複雑なテンプレートの継承や、フィルターを使ったデータ加工などが挙げられます。