首页 > 解决方案 > Django:模板标签 - 正确的方式?

问题描述

我写了以下简单的模板标签。我想知道在没有 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 %}

输出是 Lorem ipsum @ ...

更新:

那是新版本:

@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 ''

标签: djangotemplatetags

解决方案


模板版本似乎很好。但是如果你确实想写一个标签,还有更简单的方法。例如:

taxes = ', '.join('{} @ {}'.format(tax.name, tax.percentage) for tax in taxes)
return 'Incl. {}'.format(taxes)

推荐阅读