Объект 'SafeString' не имеет атрибута 'total_seconds'
Я пишу пользовательские шаблонные теги в django. Теперь объясню вкратце. Моя конечная цель - иметь в шаблоне поле длительности в виде часов и минут. На данный момент у меня есть поле длительности, которое предоставляет также секунды, которые я не заинтересован показывать. Поэтому цель - 1 час = 01:00, но на данный момент у меня 01:00:00. Я написал эту функцию, которая работает, когда я использую ее в моих представлениях, но мне нужно также использовать ее внутри шаблона django.
custom_tags.py
from django import template
register = template.Library()
@register.simple_tag
def duration(td):
total_seconds = int(td.total_seconds())
hours = total_seconds // 3600
minutes = (total_seconds % 3600) // 60
if minutes < 1:
minutes = '00'
elif minutes < 2:
minutes = '01'
elif minutes < 3:
minutes = '02'
elif minutes < 4:
minutes = '03'
elif minutes < 5:
minutes = '04'
elif minutes < 6:
minutes = '05'
elif minutes < 7:
minutes = '06'
elif minutes < 8:
minutes = '07'
elif minutes < 9:
minutes = '08'
elif minutes < 10:
minutes = '09'
return '{}:{}'.format(hours, minutes)
шаблон
<td>
{% if mix.mission.duration_dual is not None %} <strong>{% duration 'mix.mission.duration_dual' %}</strong>{% endif %}
<div>{% if mix.log_entry.eet is not None and mix.log_entry.solo_flight == False %} {{mix.log_entry.eet|time:'G:i'}} {% endif %}</div>
</td>
Виды и модели в этом случае довольно бесполезны, потому что все работает нормально, мне просто нужно понять, есть ли способ сделать так, чтобы поле времени отображалось правильно и в этом случае. Ошибка у меня следующая:
'SafeString' object has no attribute 'total_seconds'
Traceback:
Заранее большое спасибо за помощь
Это потому, что td - это строка, а не timedelta. Это можно исправить, убрав кавычки из тега следующим образом
<td>
{% if mix.mission.duration_dual is not None %}
<strong>{% duration mix.mission.duration_dual
%}</strong>{% endif %}
<div>{% if mix.log_entry.eet is not None and
mix.log_entry.solo_flight == False %}
{{mix.log_entry.eet|time:'G:i'}} {% endif %}.
</div>
</td>