Тривалістьформату польота - django, django-views

Я маю 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 }}