2016-03-17 6 views
5

Ich habe ein DurationField in meinem Modell definiert alsDurationField Format

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

Wenn ich versuche, dies zu sehen, möchte ich es formatiert als „HH: MM“ - Es ist immer weniger als 24. Also, ich versucht diese in der HTML-Vorlage-Datei:

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

Allerdings alles, was ich bekomme, ist ein leerer Raum.

Was mache ich falsch?

Antwort

6

Eine timedelta Instanz ist keine time oder datetime. Daher ist es nicht sinnvoll, die Filter time oder date zu verwenden.

Django ist mit keinen Vorlagenfiltern zur Anzeige von Zeittendern ausgestattet. Sie können also entweder Ihre eigenen schreiben oder nach einer externen App suchen, die sie bereitstellt. Möglicherweise finden Sie die Vorlagenfilter in django-timedelta-field nützlich.

3

Für die Nachwelt: hier ist, was ich am Ende verwendet habe. Dies ist der Inhalt von <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) 

Dann in der Ansicht, fügen Sie diese:

{% load datetime_filter %} 
[...] 
{{ slice.day0|format_datetime }} 
Verwandte Themen