【Django】テンプレート:日付の表示形式を変更(フォーマット)する(dateフィルタ)
2021.06.21 /
本記事では、Djangoのテンプレートで使用する組み込みフィルタのうち、dateフィルタによる日付の表示形式を変更する方法(フォーマット)について解説していきます。
Djangoには様々な組み込みフィルタが用意されています。
その中でもdateフィルタは使用頻度が高い組み込みフィルタの一つです。
本記事を通して、日付データを望んだ書式フォーマットに変更して、テンプレートに表示できるようになりましょう。
組み込みフィルタ
Djangoには、初めからテンプレート上で使用できる組み込みフィルタが存在します。
組み込みフィルタを使用することで、views.pyからテンプレートに送られた変数を操作することができます。
組み込みフィルタはテンプレートファイル(htmlファイル)内で次のように使用します。
{{ 変数名 | 組み込みフィルタ: '引数' }}
組み込みフィルタには様々な種類があります。
変数に値を加算するものや、変数から文字列を削除するものなど様々です。
本記事では日付データを指定した形式にフォーマットする組み込みフィルタを解説しています。
テンプレート:日付の表示形式を変更する(フォーマット)
日付:デフォルトの表示
テンプレートでdate形式データを出力すると以下のような出力になります。
May 4, 2021
テンプレート上で表示する日付がこの表示形式では困ることが多々あります。
例えばinputタグにデータベースの日付データを挿入したいときに、別のフォーマットで入れたい時です。
組み込みフィルタ:date
組み込みフィルタのdateを使用することでdate形式の日付データをフォーマットすることが可能です。
{{ today|date:"Y-m-d" }}
上記では変数todayに対してdateフィルタを使い、年-月-日の形式にフォーマットしています。
このようにdateフィルタでは、引数で指定した書式でdate形式の日付データをフォーマットします。
ここで言っているdate形式の日付データとは下記に示すクラスのデータです。
- django.db.models.DateTimeField/DateField
- datetime.datetime
- datetime.date
引数で使用できるフォーマット文字は多くの種類がありますので、次項で示す一覧から利用したいものを選んで使ってください。
組み込みフィルタdateのフォーマット文字:一覧
下記にdateフィルタで使用するフォーマット文字一覧を記します。
これらフォーマット文字を用いて引数に書式を指定します。
フォーマット文字 | 単位 | 意味 | 出力例 |
---|---|---|---|
Y | 年 | 年を4桁表示 | 2021 |
y | 年 | 年を2桁表示 | 21 |
L | 年 | うるう年の判定 | TrueまたはFalse |
m | 月 | 月を2桁表示(ゼロで埋める) | 01~31 |
n | 月 | 月を数値で表示(ゼロで埋めない) | 1~31 |
b | 月 | 月を英語で3文字表示(小文字) | jan |
M | 月 | 月を英語で3文字表示(頭文字のみ大文字) | Jan |
F | 月 | 月を英語で表示 | January |
N | 月 | 月を英語で表示(省略形) | Jan. Feb. March |
d | 日 | 日を2桁表示(ゼロで埋める) | 01~31 |
j | 日 | 日を数値で表示(ゼロで埋めない) | 1~31 |
z | 日 | 年単位での日を表示 | 0~365 |
S | 日 | 日の英語表記時の接尾辞 | st、nd、rd、th |
t | 日 | 月の日数 | 28~31 |
D | 曜日 | 曜日を英語で3文字表示 | Mon |
I | 曜日 | 曜日を英語で表示 | Monday |
w | 曜日 | 曜日を数値で表示 | 0(日曜)~6(土曜) |
W | 曜日 | 年間の週番号 | 1、54 |
a | 午前午後 | a.m.またはp.m. | a.m. |
A | 午前午後 | AMまたはPM | AM |
h | 時 | 時間を12時間表示(ゼロで埋める) | 01~12 |
H | 時 | 時間を24時間表示(ゼロで埋める) | 00~23 |
g | 時 | 時間を12時間表示(ゼロで埋めない) | 1~12 |
G | 時 | 時間を24時間表示(ゼロで埋めない) | 1~23 |
i | 分 | 分を表示 | 00~59 |
f | 時分 | 時間(12時間表示)と分を表示 | 5:54 |
P | 時分 | 時間(12時間表示)と分と午前午後を表示 | 5:54 a.m. |
s | 秒 | 秒を数字で2桁表示 | 00~59 |
テンプレート:日付のフォーマット例
Webアプリケーションに組み込みフィルタdateを使った例を以下に記します。
まずはviews.pyでデータベース(モデル)からデータを取得し、それをテンプレートに渡します。
# views.py
def data_list(request):
datas = Data.objects.all()
context = {'datas':datas, }
return render(request, 'data_list.html', context)
上記ではDataモデルからすべてのデータを取得し、変数datasに格納してテンプレートdata_list.htmlに渡しています。
次にテンプレートで受け取ったdatasから、created_at(保存した日付)を表示してみます。
# data_list.html
{% for data in datas %}
{{ data.created_at }}
{% endfor %}
このままでも日付データを表示することができますが、組み込みフィルタdateを使って書式フォーマットを変更してみます。
{{ data.created_at|date:"Y M d D" }}
上記では出力が2021 Jul 21 Monとなります。
時間も含めた表記にしたいときは次のようにします。
{{ data.created_at|date:"y/n/j H:i:s" }}
上記では出力が21/6/21 15:54:54となります。
日時のタイムゾーン変更
ご存じの通り、Webアプリケーションのタイムゾーンはsettings.pyで設定されています。
# settings.py
TIME_ZONE = 'Asia/Tokyo'
日本で使うWebアプリケーションでは上記の設定を記載して、JST(日本標準時刻)にしているはずです。
このタイムゾーンをテンプレートで表示する日時に対してUTC(協定世界時)に変更したい場合は、下記のようにlocaltimeを使います。
{% localtime off %}
{{ data.created_at|date:"y/n/j H:i:s" }}
{% endlocaltime %}}
まとめ
本記事「【Django】テンプレート:日付の表示形式を変更(フォーマット)する(dateフィルタ)」はいかがでしたか。
今回はDjangoのテンプレートで頻繁に使用する組み込みフィルタのうちdateについて解説しました。
dateフィルタを使いこなして、テンプレートに表示する日時を自在にフォーマットしてみてください。