Back to Blog

Jinja2とは何か?Pythonのテンプレートエンジンについて解説

flask

2024年7月3日

こんにちは。

今回の記事では、Jinja2(読み方:ジンジャツー)について詳しく解説します。

Jinja2とは、Pythonプログラミング言語で記述されたテンプレートエンジンです。Jinja2は、データをテンプレートに注入してHTMLやXMLなどのマークアップ言語を生成するために広く使用されています。

この記事では、Jinja2の基本、主な機能、使用方法、など詳しく説明します。

Jinja2はテンプレートエンジン

Jinja2とは、Pythonプログラミング言語で記述されたテンプレートエンジンです。

Jinja2を知るためには、テンプレートエンジンについて知っておく必要があるので、先にテンプレートエンジンの概要を説明します。

テンプレートエンジンとは?

テンプレートエンジンとは、静的なテンプレートファイルに動的なデータを組み込んで、最終的な出力を生成するものです。

簡単に言うと、プログラムで使うデータとHTMLのテンプレートを組み合わせて、最終的なウェブページを作り出す仕組みです。

なぜテンプレートエンジンが必要なのか?

なぜWebページを作る際にテンプレートエンジンが必要なのでしょうか?

ウェブサイトやウェブアプリケーションでは、ページの内容がユーザーや状況によって変わることがよくあります。

例えば、ユーザーごとに異なるプロフィールページや、最新の記事を表示するニュースサイトなどです。これを効率よく実現するためには、HTMLのコードと動的なデータをうまく組み合わせる必要があります。

このように、動的に変化するデータとHTMLのコードを組み合わせて使用する時にテンプレートエンジンが必要になります。

Jinja2はPythonで記述するテンプレートエンジン

ここで、Jinja2に話を戻します。

Jinja2は、PythonのウェブフレームワークであるFlaskのデフォルトテンプレートエンジンとして広く使われています。

Flaskの開発者であるArmin Ronacherによって作成され、2008年に最初のバージョンがリリースされました。Jinja2は、Djangoテンプレートエンジンの設計に影響を受けていますが、独自の機能と柔軟性を持っています。

Flaskについては、こちらで詳しく解説しています。

関連記事:Flaskとは?Pythonのマイクロフレームワークを徹底解説

Jinja2の使い方

次にJinja2の使い方について解説します。

Jinja2はFlaskで使われることが多いので、Flaskをインストールして確認してみましょう。

Flaskの事前準備

ここでは、Flaskが起動するようにインストールを行います。以下のコマンドを実行しましょう。

pip install Flask

Flaskのアプリケーションのコード(app.py)を以下のように記述します。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html', name='John')

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

次にJinja2のテンプレートを記述するファイルを作成します。ファイルは以下のようなディレクトリ構造で、templatesディレクトリ配下に作成します。

flask_app/
    ├── app.py
    └── templates/
        └── index.html

Jinja2の基本的な使い方

Jinja2では、テンプレート内で変数を使用してデータを表示できます。変数を二重中括弧 {{ }} で囲みます。

<p>Hello, {{ name }}!</p>

こちらは、app.pyで定義したname変数の値を出力します。以下の部分で、name変数に”John”という値を代入して、テンプレートに渡しています。

return render_template('index.html', name='John')

制御構造

Jinja2は、テンプレート内で条件分岐やループを使用することができます。

条件分岐では、if文を使います。

{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}!</p>
{% else %}
    <p>Please log in.</p>
{% endif %}

ループでは、for文を使います。

<ul>
{% for item in items %}
    <li>{{ item }}</li>
{% endfor %}
</ul>

マクロ

Jinja2では、マクロを記述することができます。

マクロは、テンプレート内で再利用可能なコードブロックを定義するために使用されます。関数のように振る舞い、引数を受け取ることができます。

{% macro render_item(item) %}
    <li>{{ item }}</li>
{% endmacro %}

<ul>
    {% for item in items %}
        {{ render_item(item) }}
    {% endfor %}
</ul>

{% macro render_item(item) %}の部分でJinja2のマクロを定義しています。render_itemという名前のマクロを定義し、itemという引数を取ります。

受け取った引数をHTMLの<li>タグで出力するというのが今回のマクロです。

このようにJinja2のマクロを使います。

参考リンク

まとめ

今回の記事では、Jinja2(ジンジャツー)について解説しました。

Jinja2のようなテンプレートエンジンは、ウェブ開発において必要不可欠なツールです。テンプレートエンジンを使うことで、開発のスピードと効率が向上し、コードの保守性も高まります。

使い方を覚えて、今後の開発にお役に立てれば幸いです。

ここまでお読みいただきありがとうございました。

Webの知識を作りながら学ぶ
Flask WebAcademy

SNSアプリやチャットアプリ、さまざまなアプリを作りながら学べる実践的なカリキュラム

詳細を見る