16

num_countriesというテンプレート変数がある場合、Djangoで複数形にするために、次のように書くことができます。

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

jinja2でこのようなことをする方法はありますか?(これがjinja2では機能しないことを私は知っています)これに代わるjinja2は何ですか?

ヒントをありがとう!

4

4 に答える 4

33

Guy Adini の返信は間違いなく正しい方法ですが、Django の複数化フィルターまったく同じではないと思います (または誤用した可能性があります) 。

したがって、これが私の実装でした(デコレータを使用して登録します)

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

このように、まったく同じように使用されます (パラメーターが少し異なる方法で渡されます)。

countr{{ num_countries|pluralize:("y","ies") }}
于 2014-03-11T20:35:10.660 に答える
15

現在の Jinja バージョンには、適切な翻訳タグと複数形化タグを追加するi18n 拡張機能があります。

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

実際に複数の言語バージョンを持っていない場合でも、これを使用できます。また、他の言語を追加する場合は、変更を必要としない適切なベースが得られます (すべての言語が「s」を追加して複数形にするわけではなく、複数の言語を持つ言語もあります)。複数形)。

于 2015-02-11T16:23:31.963 に答える
5

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_pluralをJinjaテンプレートとして使用できます。

于 2012-07-30T04:55:27.837 に答える
-6

You also want to check if the word is already plural. Here is my solution:

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

Then register the tag to your environment (this can be applied to the Django templating engine too).

于 2014-01-23T17:42:33.523 に答える