Python初心者でもカンタン!Djangoのsettings.TIME_FORMATで時間表示をスッキリ


settings.TIME_FORMAT は、Django テンプレートで時間フィールドの表示形式を制御する設定項目です。デフォルト値は 'P:H:i:s' で、これは 24 時間形式で時、分、秒を表示します。

設定方法

settings.TIME_FORMAT は、settings.py ファイルで以下のように設定します。

TIME_FORMAT = 'P:H:i:s'  # デフォルト値

フォーマット文字列は以下の通りです。

  • P: 午前/午後 (AM/PM) を表示する場合は P を使用します。
  • s: 秒
  • i: 分
  • H: 時 (24 時間形式)

以下の例は、午前/午後を表示し、秒数を省略した時間形式を設定します。

TIME_FORMAT = 'P:H:i'

注意点

  • カスタムフォーマットを使用したい場合は、formats.py ファイルを作成してフォーマット文字列を定義する必要があります。
  • USE_L10N 設定が True の場合、settings.TIME_FORMAT はロケールの設定によって上書きされます。

以下の例は、settings.TIME_FORMAT を使って時間フィールドをテンプレートで表示する方法を示します。

models.py

from django.db import models

class MyModel(models.Model):
    time_field = models.TimeField()

views.py

from django.shortcuts import render

def my_view(request):
    model_instance = MyModel.objects.get(pk=1)
    return render(request, 'my_template.html', {'model_instance': model_instance})

my_template.html

{{ model_instance.time_field }}

このコードを実行すると、settings.TIME_FORMAT で設定された形式で時間フィールドが表示されます。



カスタムフォーマット設定

settings.py

TIME_FORMAT = 'H時 m分 s秒'  # カスタムフォーマット

models.py

from django.db import models

class MyModel(models.Model):
    time_field = models.TimeField()

views.py

from django.shortcuts import render

def my_view(request):
    model_instance = MyModel.objects.get(pk=1)
    return render(request, 'my_template.html', {'model_instance': model_instance})

my_template.html

{{ model_instance.time_field }}

このコードを実行すると、時間フィールドが "H時 m分 s秒" の形式で表示されます。

午前/午後を表示

この例では、settings.TIME_FORMAT で午前/午後を表示する設定と、テンプレートでの表示方法を示します。

settings.py

TIME_FORMAT = 'P H:i'  # 午前/午後を表示

models.py

from django.db import models

class MyModel(models.Model):
    time_field = models.TimeField()

views.py

from django.shortcuts import render

def my_view(request):
    model_instance = MyModel.objects.get(pk=1)
    return render(request, 'my_template.html', {'model_instance': model_instance})

my_template.html

{{ model_instance.time_field }}

このコードを実行すると、時間フィールドが "午前/午後 H時:分" の形式で表示されます。

この例では、settings.TIME_FORMAT で秒数を省略する設定と、テンプレートでの表示方法を示します。

settings.py

TIME_FORMAT = 'H:i'  # 秒数を省略

models.py

from django.db import models

class MyModel(models.Model):
    time_field = models.TimeField()

views.py

from django.shortcuts import render

def my_view(request):
    model_instance = MyModel.objects.get(pk=1)
    return render(request, 'my_template.html', {'model_instance': model_instance})

my_template.html

{{ model_instance.time_field }}

このコードを実行すると、時間フィールドが "H時:分" の形式で表示されます。



テンプレートフィルターを使用する

テンプレートフィルターを使用して、時間フィールドの表示形式を個別にカスタマイズできます。 以下の例は、timeformat フィルターを使用して、午前/午後を表示する形式にフォーマットする方法を示しています。

{{ my_time_field | timeformat:"P H:i" }}

このフィルターは、my_time_field 変数に格納された時間フィールドに対して適用されます。

カスタムテンプレートタグを使用する

より複雑なフォーマットが必要な場合は、カスタムテンプレートタグを作成することができます。 以下の例は、カスタムテンプレートタグを使用して、12時間形式に変換し、接頭辞とサフィックスを追加する方法を示しています。

from django import template

register = template.Library()

@register.simple_tag
def my_time_format(time_field):
    """
    時間フィールドを12時間形式に変換し、接頭辞とサフィックスを追加します。
    """
    formatted_time = time_field.strftime('%I:%M %p')
    return f'{formatted_time} [表示時間]'

テンプレートで使用するには、次のように記述します。

{{ my_model_instance.time_field | my_time_format }}

フォーマット文字列を動的に生成する

フォーマット文字列を動的に生成することで、より高度な制御を実現できます。 以下の例は、現在のロケールに基づいてフォーマット文字列を生成する方法を示しています。

from django.utils import translation

def get_time_format():
    """
    現在のロケールに基づいて時間フォーマット文字列を生成します。
    """
    current_locale = translation.get_language()
    if current_locale == 'ja':
        return 'P H時 m分 s秒'
    else:
        return 'H:i:s'

time_format = get_time_format()

{{ my_time_field | timeformat:time_format }}

このコードは、get_time_format 関数を使用して、現在のロケールに基づいてフォーマット文字列を生成します。 その後、timeformat フィルターを使用して、生成されたフォーマット文字列を時間フィールドに適用します。

これらの代替方法は、settings.TIME_FORMATよりも柔軟性と制御性に優れています。 状況に応じて適切な方法を選択してください。

  • 常に最新のDjangoドキュメントを参照して、利用可能なオプションを確認してください。
  • フォーマット文字列を動的に生成すると、複雑なフォーマット要件に対応することができます。
  • テンプレートフィルターとカスタムテンプレートタグは、再利用可能なコードを作成するのに役立ちます。