我正在用django编写一个自定义模板标记。现在,我简单地解释一下。我的最后一个目标是在我的模板中有一个持续时间字段作为小时和分钟。目前,我有一个持续时间字段,它也提供秒,我对此不感兴趣。所以目标是1小时= 01:00,但现在我有01: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 (most recent call last):
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/astergest/mission/views.py", line 71, in student_mission_ppl
return render(request, 'mission/student_mission_ppl.html', context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 176, in render
return self._render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 168, in _render
return self.nodelist.render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 977, in render
return SafeString(''.join([
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 978, in <listcomp>
node.render_annotated(context) for node in self
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render_annotated
return self.render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/loader_tags.py", line 153, in render
return compiled_parent._render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 168, in _render
return self.nodelist.render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 977, in render
return SafeString(''.join([
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 978, in <listcomp>
node.render_annotated(context) for node in self
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render_annotated
return self.render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/loader_tags.py", line 65, in render
result = block.nodelist.render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 977, in render
return SafeString(''.join([
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 978, in <listcomp>
node.render_annotated(context) for node in self
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render_annotated
return self.render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/defaulttags.py", line 214, in render
nodelist.append(node.render_annotated(context))
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render_annotated
return self.render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/defaulttags.py", line 295, in render
return nodelist.render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 977, in render
return SafeString(''.join([
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 978, in <listcomp>
node.render_annotated(context) for node in self
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render_annotated
return self.render(context)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/venv/lib/python3.9/site-packages/django/template/library.py", line 193, in render
output = self.func(*resolved_args, **resolved_kwargs)
File "/Users/Giorgio 1/Documents/Programmazione/Astergest/astergest/mission/templatetags/custom_tags.py", line 7, in duration
total_seconds = int(td.total_seconds())
AttributeError: 'SafeString' object has no attribute 'total_seconds'非常感谢您的帮助
发布于 2022-02-15 16:24:16
这是因为td是一个字符串,而不是时间增量。您可以通过从标记中删除引号来修复这个问题,如下所示
<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>https://stackoverflow.com/questions/71129700
复制相似问题