我写了以下简单的模板标签。我想知道是否有更好的方法来写这个没有i = 0和i + 1,或者你认为这是一个好的解决方案?
@register.simple_tag
def taxes(taxes):
i = 0
s = ""
for tax in taxes:
if i is not 0:
s += ", "
s += tax.name
i += 1
output = "Incl. {}".format(s)
return output
作为替代方案,我在我的模板中编写了这个函数。它有相同的结果,但模板标签看起来更有条理。
{% spaceless %}
{% for tax in form.initial.ticket.ticket_tax.all %}
{% if forloop.first %}
Incl.
{% else %}
,
{% endif %}
{{ tax.name }} @
{% get_tax_rate tax.percentage %}
{% endfor %}
{% endspaceless %}
更新
这是新版本:
@register.simple_tag
def show_taxes(taxes):
taxes = ', '.join('{} @ {} %'.format(
tax.name,
round(tax.percentage * 100, 2)
) for tax in taxes)
if taxes:
return 'Incl. {}'.format(taxes)
else:
return ''
答案 0 :(得分:0)
模板版似乎很好。但是如果你想写一个标签,那么有很多简单的方法。例如:
taxes = ', '.join('{} @ {}'.format(tax.name, tax.percentage) for tax in taxes)
return 'Incl. {}'.format(taxes)