如何在jinja2模板中对名称进行复数?

2024-04-28 21:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个名为num_countries的模板变量,要与Django进行复数运算,我可以编写如下内容:

countr{{ num_countries|pluralize:"y,ies" }}

有没有办法对jinja2做这样的事情?(我知道这在jinja2是行不通的)jinja2的替代方案是什么?

谢谢你的小费!


Tags: django模板jinja2内容方案事情countriesnum
3条回答

根据Jinja的文档,没有built in filter可以满足您的需求。但是,您可以很容易地设计一个custom filter来实现这一点:

def my_plural(str, end_ptr = None, rep_ptr = ""):
    if end_ptr and str.endswith(end_ptr):
        return str[:-1*len(end_ptr)]+rep_ptr
    else:
        return str+'s'

然后在您的环境中注册:

environment.filters['myplural'] = my_plural

你现在可以使用我的复数作为一个金贾模板。

当前的Jinja版本有i18n extension,它添加了一些不错的翻译和复数标记:

{% trans count=list|length %}
There is {{ count }} {{ name }} object.
{% pluralize %}
There are {{ count }} {{ name }} objects.
{% endtrans %}

即使你没有多个语言版本,你也可以使用它——如果你添加了其他语言,你会有一个不需要修改的好的基础(不是所有的语言都通过添加一个‘s’来复数,有些甚至有多个复数形式)。

盖伊·阿迪尼的回答肯定是正确的,尽管我认为(或者可能是我用错了)它与Django中的复数过滤器并不完全相同。

因此这是我的实现(使用decorator注册)

@app.template_filter('pluralize')
def pluralize(number, singular = '', plural = 's'):
    if number == 1:
        return singular
    else:
        return plural

这样,它的使用方式完全相同(嗯,参数的传递方式略有不同):

countr{{ num_countries|pluralize:("y","ies") }}

相关问题 更多 >