コンテンツにスキップ

Jinja2

出典: フリー教科書『ウィキブックス(Wikibooks)』

はじめに

[編集]

Jinja2は、Pythonで広く使用されているテンプレートエンジンです。HTMLXML、その他のマークアップ言語を生成するために使用されます。Jinja2は、FlaskDjangoなどのウェブアプリケーションフレームワークでよく利用されています。このハンドブックでは、Jinja2の基本的な使い方から高度な機能までを解説します。

Jinja2のインストール

[編集]

Jinja2pipを使って簡単にインストールできます。

pip install Jinja2

基本的な構文

[編集]

変数の展開

[編集]

Jinja2では、{{ }}を使って変数を展開します。

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

制御構造

[編集]

Jinja2では、{% %}を使って制御構造を記述します。

条件分岐

[編集]
{% if user %}
  <p>Welcome, {{ user }}!</p>
{% else %}
  <p>Please log in.</p>
{% endif %}

ループ

[編集]
<ul>
{% for item in items %}
  <li>{{ item }}</li>
{% endfor %}
</ul>

フィルター

[編集]

フィルターを使うことで、変数の値を変換できます。

<p>{{ name|upper }}</p>

テンプレートの継承

[編集]

Jinja2では、テンプレートの継承を使ってコードの重複を避けることができます。

ベーステンプレート (base.html)

[編集]
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Default Title{% endblock %}</title>
</head>
<body>
    {% block content %}{% endblock %}
</body>
</html>

子テンプレート (child.html)

[編集]
{% extends "base.html" %}

{% block title %}Child Title{% endblock %}

{% block content %}
<p>This is the child template.</p>
{% endblock %}

高度な機能

[編集]

マクロ

[編集]

マクロを使うことで、再利用可能なコードブロックを作成できます。

{% macro input(name, value='', type='text') %}
  <input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}

{{ input('username') }}
{{ input('password', type='password') }}

テンプレートのインクルード

[編集]

includeを使って、他のテンプレートをインクルードできます。

{% include 'header.html' %}
<p>Main content goes here.</p>
{% include 'footer.html' %}

カスタムフィルター

[編集]

カスタムフィルターを作成することで、独自の変数変換を定義できます。

from jinja2 import Environment

def reverse_filter(s):
    return s[::-1]

env = Environment()
env.filters['reverse'] = reverse_filter

template = env.from_string('{{ "hello"|reverse }}')
print(template.render())  # 出力: olleh

カスタムテスト

[編集]

カスタムテストを作成することで、独自の条件判定を定義できます。

from jinja2 import Environment

def is_even(n):
    return n % 2 == 0

env = Environment()
env.tests['even'] = is_even

template = env.from_string('{% if 42 is even %}Even{% else %}Odd{% endif %}')
print(template.render())  # 出力: Even

ベストプラクティス

[編集]
  1. テンプレートの継承を活用する: コードの重複を避けるために、テンプレートの継承を積極的に利用しましょう。
  2. マクロを使う: 繰り返し使用するコードはマクロとして定義し、再利用性を高めましょう。
  3. フィルターとテストを活用する: フィルターとテストを使って、テンプレート内のロジックを簡潔に保ちましょう。
  4. セキュリティに注意する: ユーザー入力をそのままテンプレートに渡さないようにし、適切にエスケープ処理を行いましょう。

参考文献

[編集]

このハンドブックが、Jinja2を使ったテンプレート作成の参考になれば幸いです。