2016-03-17 36 views
5

我在我的模型中定義爲DurationField格式

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

一個DurationField當我嘗試查看這一點,我想它格式化爲「HH:MM」 - 它總是小於24.所以,我在HTML模板文件中試過這些:

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

但是,我得到的只是一個空白空間。

我在做什麼錯?

回答

6

A timedelta實例不是timedatetime。因此,使用timedate過濾器沒有任何意義。

Django沒有附帶任何模板過濾器來顯示timedeltas,因此您可以編寫自己的代碼或查找提供它們的外部應用程序。您可能會發現django-timedelta-field中的模板過濾器很有用。

3

後人:這是我最終使用的。這是<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 }}