DurationField格式

时间:2016-03-17 10:31:37

标签: 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' }}

然而,我得到的只是一个空地。

我做错了什么?

2 个答案:

答案 0 :(得分:6)

timedelta个实例不是timedatetime。因此,使用timedate过滤器没有意义。

Django没有附带任何模板过滤器来显示timedeltas,因此您可以编写自己的模板,也可以查找提供它们的外部应用程序。您可能会发现django-timedelta-field中的模板过滤器很有用。

答案 1 :(得分:5)

对于后人:这是我最后使用的内容。这是<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 }}