フィルターとは何か
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」を参照してください。