Jinja2テンプレートにおけるフィルターの活用方法

フィルターとは何か

Jinja2テンプレートエンジンでは、フィルターは変数の表示形式を加工・変換するための機能です。パイプ記号(|)を使って変数に適用され、オプションの引数も括弧で渡すことができます。複数のフィルターを連鎖させることも可能です。

組み込みフィルターの使用例

たとえば、文字列の長さを取得するには次のように記述します:

{{ user.name|length }}

リストを特定の区切り文字で結合する場合は以下の通りです:

{{ items|join(', ') }}

実装例:ユーザー名とその長さの表示

アプリケーションコード(main.py):

from flask import Flask, render_template

app = Flask(__name__)

class Account:
    def __init__(self, name, contact):
        self.name = name
        self.contact = contact

@app.route('/demo')
def show_user():
    profile = Account(name='山田', contact='yamada@example.com')
    return render_template('demo.html', profile=profile)

テンプレートファイル(demo.html):

<div>{{ profile.name }} - 文字数: {{ profile.name|length }}</div>

カスタムフィルターの定義と利用

独自のフィルターを作成し、テンプレート内で使用することもできます。以下は日時をフォーマットするフィルターの例です。

main.py

from flask import Flask, render_template
from datetime import datetime

app = Flask(__name__)

def format_datetime(dt, fmt='%Y年%m月%d日 %H:%M'):
    return dt.strftime(fmt)

app.add_template_filter(format_datetime, 'fmtdate')

class Account:
    def __init__(self, name, contact):
        self.name = name
        self.contact = contact

@app.route('/demo')
def show_user():
    profile = Account(name='山田', contact='yamada@example.com')
    current = datetime.now()
    return render_template('demo.html', profile=profile, current=current)

demo.html

<div>現在時刻: {{ current|fmtdate }}</div>

参考情報

Jinja2が提供する標準フィルターの一覧や詳細な使い方については、公式ドキュメント「Jinja2 Template Designer Documentation」を参照してください。

タグ: flask Jinja2 Python

6月1日 19:43 投稿