2016-03-17 18 views
5

Tôi có một DurationField định nghĩa trong mô hình của tôi nhưDurationField định dạng

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

Khi tôi cố gắng xem này, tôi muốn nó được định dạng như "HH: MM" - Nó luôn luôn là ít hơn 24. Vì vậy, tôi đã thử các tệp này trong tệp mẫu HTML:

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

Tuy nhiên, tất cả những gì tôi nhận được là một khoảng trống.

Tôi đang làm gì sai?

Trả lời

6

Ví dụ timedelta không phải là time hoặc datetime. Do đó, bạn không nên sử dụng các bộ lọc time hoặc date.

Django không đi kèm với bất kỳ bộ lọc mẫu nào để hiển thị timedeltas, do đó bạn có thể tự viết hoặc tìm ứng dụng bên ngoài cung cấp cho chúng. Bạn có thể tìm thấy các bộ lọc mẫu trong django-timedelta-field hữu ích.

3

Đối với hậu thế: dưới đây là những gì tôi đã sử dụng cuối cùng. Đây là nội dung của <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) 

Sau đó, trong giao diện, thêm này:

{% load datetime_filter %} 
[...] 
{{ slice.day0|format_datetime }} 
Các vấn đề liên quan