Display and format Django DurationField in template

时光毁灭记忆、已成空白 提交于 2020-01-13 08:15:29

问题


Im using Django 1.8, and i have one of my field defined as DurationField, but i dont find any way to correctly display it on my template, if i output it like this:

{{runtime}}
i just get 0:00:00.007980

is there any filter or any other way of displaying something more like

2hours 30 min

回答1:


No, I don't think there is any built in filter to format a timedelta, it should be fairly easy to write one yourself though.

Here is a basic (and untested) example:

from django import template


register = template.Library()


@register.filter
def duration(td):
    total_seconds = int(td.total_seconds())
    hours = total_seconds // 3600
    minutes = (total_seconds % 3600) // 60

    return '{} hours {} min'.format(hours, minutes)



回答2:


This is the one I use, it rounds minutes and display only the information needed :

@register.filter
def duration(timedelta):
    """ Format a duration field --> 2h and 30 min or only 45 min """
    total_seconds = int(timedelta.total_seconds())
    hours = total_seconds // 3600
    minutes = round((total_seconds % 3600) / 60)
    if minutes == 60:
        hours += 1
        minutes = 0
    if hours and minutes:
        # Display both
        return '{}h et {} min'.format(hours, minutes)
    elif hours:
        # Display only hours
        return '{}h'.format(hours)
    # Display only minutes
    return '{} min'.format(minutes)


来源:https://stackoverflow.com/questions/33105457/display-and-format-django-durationfield-in-template

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!