Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:模板标记-正确的方法?_Django_Templatetags - Fatal编程技术网

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

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

我编写了以下简单的模板标记。我想知道如果没有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. {}".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)

嗨,丹尼尔,非常感谢你给我的提示来改进我的代码。这就是我要找的。只有一个问题。逗号“,”不应该第一次打印,只有第二次、第三次等。您知道如何实现它吗?这就是这段代码将要做的;它会在每个结果之间插入逗号,所以不会在第一个结果之前或最后一个结果之后。嗨,丹尼尔,非常感谢,这非常有效。因为我有一些案例,税收是空的,我不得不在最后加上一张支票。我在我原来的帖子中更新了它,你也是这样做的吗?