Django:模板标记-正确的方法?
我编写了以下简单的模板标记。我想知道如果没有i=0和i+1,有没有更好的方法来写这个,或者你认为这是一个好的解决方案吗?< /P>Django:模板标记-正确的方法?,django,templatetags,Django,Templatetags,我编写了以下简单的模板标记。我想知道如果没有i=0和i+1,有没有更好的方法来写这个,或者你认为这是一个好的解决方案吗?< /P> @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
@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)
嗨,丹尼尔,非常感谢你给我的提示来改进我的代码。这就是我要找的。只有一个问题。逗号“,”不应该第一次打印,只有第二次、第三次等。您知道如何实现它吗?这就是这段代码将要做的;它会在每个结果之间插入逗号,所以不会在第一个结果之前或最后一个结果之后。嗨,丹尼尔,非常感谢,这非常有效。因为我有一些案例,税收是空的,我不得不在最后加上一张支票。我在我原来的帖子中更新了它,你也是这样做的吗?