
目次
Django · Template Customization · 表示形式の整形
表示形式のちょっとした調整(数値に 3 桁カンマを入れる、日付を「3 時間前」のように相対表示する、ファイルサイズを「1.2 MB」のように単位付きにする、等)は、ユーザー体験に大きく影響します。Django 標準の humanize テンプレートタグ を使えば、これらを 1 行のテンプレートタグで実現できます。本記事では humanize の各種フィルタ(intcomma、naturaltime、filesizeformat 等)の使い方を実例付きで解説します。
この記事では、Djangoのテンプレート内における各種データの表示形式のカスタマイズ方法を紹介します。
user@sinyblog:~/article ❯ 01_django_contrib_human.mddjango.contrib.humanize
Djangoには標準でdjango.contrib.humanizeというフィルタセットが存在しており、この機能を利用することでHTMLに表示される各種データの形式をカスタマイズすることができます。
以下のようなカスタマイズを行うことができます。
- 1-9 の数字に対して、数をアルファベットで表す。
(例: 1 → one, 2→ two)
- 整数または浮動小数点数(またはそのいずれかの文字列表現)を、3桁ごとにカンマを含む文字列に変換
(例:4500→4,500)
- 大きな整数(または整数の文字列表現)をわかりやすいテキスト表現に変換。
(例:1000000 → 1.0 million)
- 今日、明日、昨日に該当する日付をそれぞれtoday(今日)、tomorrow(明日)、yesterday(昨日)に変換する。
- datetime 値に対して、何時間(分、秒)前であったかを表わす文字列に変換
(例:17 Feb 2007 16:25:35 → 4 minutes ago)
user@sinyblog:~/article ❯ 02_section_2.md設定手順
設定手順は非常に簡単です。
まず、settings.pyの INSTALLED_APPSに 'django.contrib.humanize' を追加します。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize', #追加
]
次に、テンプレートファイル内の頭に以下を追加します。
class Kakeibo(models.Model):
class Meta:
verbose_name ="家計簿"
verbose_name_plural ="家計簿"
#カラムの定義
date = models.DateField("日付",default=datetime.now)
category = models.ForeignKey(Category, on_delete = models.PROTECT, verbose_name="カテゴリ")
money = models.IntegerField("金額", help_text="単位は日本円")
quantity = models.IntegerField(verbose_name="数量",default=0)
memo = models.CharField(verbose_name="メモ", max_length=500)
regist_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.memo
数字を3桁表示に変更したい場合
金額項目の表示を3桁区切りに変更したい場合は、intcommaフィルタを利用します。
テンプレート内の設定を以下のように変更します。

桁数の多い数字の表示形式をカスタマイズしたい場合
桁数が多い数字を省略して表示したい場合は、intwordフィルタを利用します。

これはちょっと微妙な感じですかね。
日付の形式をカスタマイズしたい場合

何時間(分、秒)前であったかを表わす文字列に変換したい場合
時刻表示に対して、現在を基準にどれだけ前を表すかを直感的に表したい場合はnaturaltimeを利用します。
ブログの更新時刻や、コメントの更新時刻などに適用すると直感的に更新タイミングを理解できるので人にやさしい設計になりますね。

他にも若干ですがカスタマイズの種類がありますので、詳しく知りたい方はDjango公式ドキュメントをチェックしてみてください。

