/ / DauerFeldformat - Django, Django-Ansichten

DurationField Format - Django, Django-Ansichten

Ich habe ein DurationField in meinem Modell definiert als

day0 = models.DurationField("Duration for Monday", default=datetime.timedelta)

Wenn ich versuche, das anzuzeigen, möchte ich, dass es als "HH: MM" formatiert ist. Es ist immer weniger als 24. Daher habe ich diese in der HTML-Vorlagendatei versucht:

{{ slice.day0|time:"H:M" }}
{{ slice.day0|date:"H:M" }}

Ich bekomme jedoch nur einen leeren Raum.

Was mache ich falsch?

Antworten:

6 für die Antwort № 1

EIN timedelta Instanz ist keine time oder ein datetime. Daher macht es keinen Sinn, das zu verwenden time oder date Filter.

Django enthält keine Vorlagenfilter, um Zeitangaben anzuzeigen. Sie können also entweder eigene Filter schreiben oder nach einer externen App suchen, die diese bereitstellt. Möglicherweise finden Sie die Vorlagenfilter in Django-Timedelta-Feld sinnvoll.


4 für die Antwort № 2

Für die Nachwelt: hier ist was ich am Ende verwendet habe. Dies ist der Inhalt von <app>/templatetags/datetime_filter.py:

# -*- coding: utf-8 -*-
"""Application filter for `datetime`_ 24 hours.

.. _datetime: https://docs.python.org/2/library/datetime.html
"""

from django import template
from datetime import date, timedelta

register = template.Library()

@register.filter(name="format_datetime")
def format_datetime(value):
hours, rem = divmod(value.seconds, 3600)
minutes, seconds = divmod(rem, 60)
return "{}h {}m".format(hours, minutes)

Fügen Sie dann in der Ansicht Folgendes hinzu:

{% load datetime_filter %}
[...]
{{ slice.day0|format_datetime }}