Django {%blocktrans%}:如何处理for循环中的复数?

时间:2013-12-02 19:54:48

标签: python django templates pluralize

我的Django模板中有以下循环:

{% for item in state.list %}

    <div> HTML (CUSTOMERS BY STATE) </div>

    <!-- print sum of customers at bottom of list -->
    {% if forloop.last %}
        <h4>{{ forloop.counter }} Valued Customers</h4>
    {% endif %}

{% endfor %}

显然,如果我最终只有一个客户,我想打印单数“有价值的客户”

根据Django的docs,应该使用blocktrans。尝试了以下几种嵌套方式:

    {% blocktrans count %}
        {% if forloop.last %}
            <h4>
                {{ forloop.counter }}
                &nbsp;Valued Customer
                {% plural %}
                &nbsp;Valued Customers
            </h4>
        {% endif %}
    {% endblocktrans %} 

继续 TemplateSyntaxError:无效的块标记:'blocktrans',预期'空'或'endfor'

有没有办法与另一个循环结合?任何想法如何解决?谢谢!

3 个答案:

答案 0 :(得分:5)

这是工作代码,感谢alko:

{% load i18n %}

<!-- ... -->

{% if forloop.last %}
    <h4>
        {{ forloop.counter }}
        {% blocktrans count count=forloop.counter %}
             Valued Customer
        {% plural %}
             Valued Customers
        {% endblocktrans %} 
    </h4>
{% endif %}

答案 1 :(得分:3)

可能你忘了load translation tags。在模板顶部添加以下行:

{% load i18n %}

修正后,请注意blocktranscount标记应该指定一个变量,其值将用于多个检测,因此您可能需要类似

的内容
{% blocktrans count count=forloop.counter %}

答案 2 :(得分:1)

要复数使用此:

Customer{{ forloop.counter|pluralize }}