Django:模板标签 - 正确的方法?
Django: Template tag - the right way?
我写了下面这个简单的模板标签。我想知道在没有 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 ''
模板版本似乎不错。但是如果你真的想写一个标签,有更简单的方法。例如:
taxes = ', '.join('{} @ {}'.format(tax.name, tax.percentage) for tax in taxes)
return 'Incl. {}'.format(taxes)
我写了下面这个简单的模板标签。我想知道在没有 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 ''
模板版本似乎不错。但是如果你真的想写一个标签,有更简单的方法。例如:
taxes = ', '.join('{} @ {}'.format(tax.name, tax.percentage) for tax in taxes)
return 'Incl. {}'.format(taxes)