本文へスキップ
BecomeCoder

Djangoコース · 第3章 テンプレート · レッスン12

フィルタ ― 値を整えて表示する

ブラウザで完結

導入

「文字を大文字に」「日付をきれいに」「値が無ければ既定値を」。表示のちょっとした加工は、{{ 変数|フィルタ }}フィルタで行います。

説明

フィルタはパイプ |変数につなげます。いくつも重ねられます。

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"}) を渡します。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。