【问题标题】:Django {% blocktrans %}: How to handle pluralization inside a for loop?Django {% blocktrans %}:如何在 for 循环中处理复数?
【发布时间】:2013-12-18 15:42:44
【问题描述】:

我的 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: Invalid block tag: 'blocktrans', expected 'empty' or 'endfor'

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

【问题讨论】:

    标签: python django templates pluralize


    【解决方案1】:

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

    {% load i18n %}
    

    修复该问题后,请注意对于count 之后的blocktrans 标记,应指定一个变量,其值将用于复数检测,因此您可能需要类似

    {% blocktrans count count=forloop.counter %}
    

    【讨论】:

    • 不知道必须加载标签。需要为 count 提供一个值是完全有意义的。我不得不重新排列下面的内容,但现在效果很好——谢谢!
    【解决方案2】:

    要复数使用这个:

    Customer{{ forloop.counter|pluralize }}
    

    【讨论】:

    • 对于这个简单的复数形式,我可能需要更多的东西:)
    • 请注意,这是不可翻译的。您可能想使用 blocktrans/plural 方法。
    【解决方案3】:

    这是工作代码,感谢 alko:

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

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 2018-08-02
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      相关资源
      最近更新 更多