【问题标题】:DurationField format持续时间字段格式
【发布时间】:2016-03-17 10:31:36
【问题描述】:

我在我的模型中定义了一个DurationField

day0 = models.DurationField('Duration for Monday', default=datetime.timedelta)

当我尝试查看时,我希望它的格式为“HH:MM”——它总是小于 24。所以,我在 HTML 模板文件中尝试了这些:

{{ slice.day0|time:'H:M' }}
{{ slice.day0|date:'H:M' }}

但是,我得到的只是一个空白空间。

我做错了什么?

【问题讨论】:

标签: django django-views


【解决方案1】:

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

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

【讨论】:

    【解决方案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 }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 2011-02-23
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多