mám DurationField
definované v mojom modeli ako
day0 = models.DurationField("Duration for Monday", default=datetime.timedelta)
Keď sa to snažím zobraziť, chcem, aby bol formátovaný ako „HH: MM“ - je to vždy menej ako 24. Takže som to vyskúšal v súbore šablóny HTML:
{{ slice.day0|time:"H:M" }}
{{ slice.day0|date:"H:M" }}
Všetko, čo dostanem, je však prázdne miesto.
Čo robím zle?
odpovede:
6 pre odpoveď č. 1A timedelta
inštancia nie je time
alebo a datetime
, Preto nemá zmysel používať internetový obchod time
alebo date
filtre.
Django neprichádza so žiadnymi filtrami šablón na zobrazenie timedeltas, takže môžete buď napísať svoju vlastnú, alebo hľadať externú aplikáciu, ktorá ich poskytuje. Môžete nájsť filtre šablón Django-timedelta-field užitočné.
4 pre odpoveď č. 2
Na potomstvo: toto je to, čo som nakoniec použil. Toto je obsah stránky <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)
Potom v zobrazení pridajte toto:
{% load datetime_filter %}
[...]
{{ slice.day0|format_datetime }}