導入
「文字を大文字に」「日付をきれいに」「値が無ければ既定値を」。表示のちょっとした加工は、{{ 変数|フィルタ }} のフィルタで行います。
説明
フィルタはパイプ | で変数につなげます。いくつも重ねられます。
import django
from django.conf import settings
if not settings.configured:
settings.configure(DEBUG=True, SECRET_KEY="dev",
TEMPLATES=[{"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [], "APP_DIRS": False, "OPTIONS": {}}])
django.setup()
from django.template import Template, Context
tpl = Template("""
大文字: {{ name|upper }}
文字数: {{ name|length }}
既定値: {{ nickname|default:"名無し" }}
丸め: {{ price|floatformat:0 }}
先頭大文字: {{ title|capfirst }}
""")
html = tpl.render(Context({
"name": "django",
"nickname": "", # 空なので default が効く
"price": 1234.56,
"title": "hello world",
}))
print(html)
よく使うフィルタ:
upper/lower… 大文字・小文字に。length… 文字数・要素数。default:"..."… 値が空のときの代わり。floatformat:N… 小数点以下 N 桁に丸める。date:"Y-m-d"… 日付の書式化(日付オブジェクトに対して)。truncatechars:N… N 文字で切って…を付ける。
ロジック({% %})ではなく「表示の見た目を整える」のがフィルタの役割です。
やってみよう
nickname に何か文字を入れると default が効かなくなること、price の値を変えると floatformat の丸めが変わることを確かめましょう。{{ name|upper|length }} のようにフィルタを重ねることもできます。
演習
{{ word|upper }} を使って、Context に渡した word="python" を大文字で表示してください。出力に PYTHON が含まれれば成功です。
ヒント1を見る
テンプレートに {{ word|upper }} を書きます。
ヒント2を見る
Context({"word": "python"}) を渡します。