Я маю DurationField
визначена в моїй моделі як
day0 = models.DurationField("Duration for Monday", default=datetime.timedelta)
Коли я намагаюся переглянути це, я хочу, щоб він був відформатований як "HH: MM" - це завжди менше 24. Отже, я спробував це у файлі шаблону HTML:
{{ slice.day0|time:"H:M" }}
{{ slice.day0|date:"H:M" }}
Однак все, що я отримую, - це порожнє місце.
Що я роблю неправильно?
Відповіді:
6 за відповідь № 1А. timedelta
екземпляр не є time
або a datetime
. Тому використовувати сенс не має сенсу time
або date
фільтри.
Django не має жодних фільтрів шаблонів для відображення тимчасових позначок, тому ви можете або написати свій власний, або шукати зовнішній додаток, який їх надає. Ви можете знайти фільтри шаблонів у django-timedelta-поле корисний
4 для відповіді № 2
Для нащадків: ось, чим я скористався. Це зміст <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)
Потім у представленні додайте це:
{% load datetime_filter %}
[...]
{{ slice.day0|format_datetime }}