Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Python 如何使用jinja2将模板中的名称复数化?_Python_Templates_Jinja2_Pluralize - Fatal编程技术网

Python 如何使用jinja2将模板中的名称复数化?

Python 如何使用jinja2将模板中的名称复数化?,python,templates,jinja2,pluralize,Python,Templates,Jinja2,Pluralize,如果我有一个名为num_countries的模板变量,要用Django实现复数,我可以这样写: countr{{ num_countries|pluralize:"y,ies" }} 有没有一种方法可以用jinja2做这样的事情?(我知道这在jinja2中不起作用)jinja2的替代方案是什么 谢谢你给我小费 根据Jinja的文档,没有什么能满足您的需求。但是,您可以轻松地设计一个用于实现此目的的: def my_plural(str, end_ptr = None, rep_ptr = ""

如果我有一个名为num_countries的模板变量,要用Django实现复数,我可以这样写:

countr{{ num_countries|pluralize:"y,ies" }}
有没有一种方法可以用jinja2做这样的事情?(我知道这在jinja2中不起作用)jinja2的替代方案是什么


谢谢你给我小费

根据Jinja的文档,没有什么能满足您的需求。但是,您可以轻松地设计一个用于实现此目的的:

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

您现在可以使用my_复数作为Jinja模板。

您还需要检查单词是否已经是复数。以下是我的解决方案:

def pluralize(text):
    if text[-1:] !='s':
        return text+'s'
    else: 
        return text

然后将标记注册到您的环境中(这也可以应用于Django模板引擎)。

Guy Adini的回答肯定是正确的,尽管我认为(或者可能我误用了它)它与Django中的复数化过滤器不完全相同

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

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


当前的Jinja版本具有以下功能,添加了体面的翻译和多元化标签:

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

即使您实际上没有多个语言版本,您也可以使用它。如果您添加了其他语言,您将有一个良好的基础,不需要任何更改(并非所有语言都通过添加“s”来实现复数,有些语言甚至具有多个复数形式)。

使用带参数的自定义筛选器时,似乎不需要分号。至少在jinja2的v.2.8中没有任何提示。我想你的例子应该是这样的:
countr{{{num_countries}复数(“y”,“ies”)}
21,31,41国家,11个国家我会在{1,21,31,41,51,61,71,81,91}中使用
number%100
countr{{ num_countries|pluralize:("y","ies") }}
{% trans count=list|length %}
There is {{ count }} {{ name }} object.
{% pluralize %}
There are {{ count }} {{ name }} objects.
{% endtrans %}