num_countriesというテンプレート変数がある場合、Djangoで複数形にするために、次のように書くことができます。
countr{{ num_countries|pluralize:"y,ies" }}
jinja2でこのようなことをする方法はありますか?(これがjinja2では機能しないことを私は知っています)これに代わるjinja2は何ですか?
ヒントをありがとう!
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") }}
現在の Jinja バージョンには、適切な翻訳タグと複数形化タグを追加するi18n 拡張機能があります。
{% trans count=list|length %}
There is {{ count }} {{ name }} object.
{% pluralize %}
There are {{ count }} {{ name }} objects.
{% endtrans %}
実際に複数の言語バージョンを持っていない場合でも、これを使用できます。また、他の言語を追加する場合は、変更を必要としない適切なベースが得られます (すべての言語が「s」を追加して複数形にするわけではなく、複数の言語を持つ言語もあります)。複数形)。
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テンプレートとして使用できます。
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).