Ho un DurationField
definito nel mio modello come
day0 = models.DurationField("Duration for Monday", default=datetime.timedelta)
Quando provo a visualizzarlo, lo voglio formattato come "HH: MM" - È sempre inferiore a 24. Quindi, ho provato questi nel file modello HTML:
{{ slice.day0|time:"H:M" }}
{{ slice.day0|date:"H:M" }}
Tuttavia, tutto ciò che ottengo è uno spazio vuoto.
Che cosa sto facendo di sbagliato?
risposte:
6 per risposta № 1UN timedelta
istanza non è un time
o a datetime
. Pertanto non ha senso utilizzare il file time
o date
filtri.
Django non include alcun filtro modello per visualizzare i timedelt, quindi puoi scrivere il tuo o cercare un'app esterna che li fornisca. È possibile trovare i filtri dei modelli in django-timedelta-campo utile.
4 per risposta № 2
Per i posteri: ecco quello che ho usato alla fine. Questo è il contenuto di <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)
Quindi, nella vista, aggiungi questo:
{% load datetime_filter %}
[...]
{{ slice.day0|format_datetime }}