Django:模板标签 - 正确的方法?

时间:2018-06-02 12:04:57

标签: django templatetags

我写了以下简单的模板标签。我想知道是否有更好的方法来写这个没有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 %}

Output is 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 ''

1 个答案:

答案 0 :(得分:0)

模板版似乎很好。但是如果你想写一个标签,那么有很多简单的方法。例如:

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