2024-04-28 21:21:05 发布
网友
如果我有一个名为num_countries的模板变量,要与Django进行复数运算,我可以编写如下内容:
countr{{ num_countries|pluralize:"y,ies" }}
有没有办法对jinja2做这样的事情?(我知道这在jinja2是行不通的)jinja2的替代方案是什么?
谢谢你的小费!
根据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") }}
根据Jinja的文档,没有built in filter可以满足您的需求。但是,您可以很容易地设计一个custom filter来实现这一点:
然后在您的环境中注册:
你现在可以使用我的复数作为一个金贾模板。
当前的Jinja版本有i18n extension,它添加了一些不错的翻译和复数标记:
即使你没有多个语言版本,你也可以使用它——如果你添加了其他语言,你会有一个不需要修改的好的基础(不是所有的语言都通过添加一个‘s’来复数,有些甚至有多个复数形式)。
盖伊·阿迪尼的回答肯定是正确的,尽管我认为(或者可能是我用错了)它与Django中的复数过滤器并不完全相同。
因此这是我的实现(使用decorator注册)
这样,它的使用方式完全相同(嗯,参数的传递方式略有不同):
相关问题 更多 >
编程相关推荐