问题
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