Jinja2
表示
はじめに
[編集]Jinja2は、Pythonで広く使用されているテンプレートエンジンです。HTML、XML、その他のマークアップ言語を生成するために使用されます。Jinja2は、FlaskやDjangoなどのウェブアプリケーションフレームワークでよく利用されています。このハンドブックでは、Jinja2の基本的な使い方から高度な機能までを解説します。
Jinja2のインストール
[編集]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
ベストプラクティス
[編集]- テンプレートの継承を活用する: コードの重複を避けるために、テンプレートの継承を積極的に利用しましょう。
- マクロを使う: 繰り返し使用するコードはマクロとして定義し、再利用性を高めましょう。
- フィルターとテストを活用する: フィルターとテストを使って、テンプレート内のロジックを簡潔に保ちましょう。
- セキュリティに注意する: ユーザー入力をそのままテンプレートに渡さないようにし、適切にエスケープ処理を行いましょう。
参考文献
[編集]このハンドブックが、Jinja2を使ったテンプレート作成の参考になれば幸いです。