Как плюрализировать имя в шаблоне с помощью jinja2?
Если у меня есть переменная шаблона с именем num_countries, чтобы плюрализовать Django, я мог бы просто написать что-то вроде этого:
countr{{ num_countries|pluralize:"y,ies" }}
Есть ли способ сделать что-то подобное с jinja2? (Я знаю, что это не работает в jinja2). Какая альтернатива этому jinja2?
Спасибо за любой отзыв!
Ответы
Ответ 1
Согласно документации 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.
Ответ 2
Ответ Гай Адини - это, безусловно, способ пойти, хотя я думаю (или, может быть, я его неправильно использовал) это не совсем то же самое, что плюрализовать фильтр в 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") }}
Ответ 3
Текущие версии Jinja имеют расширение i18n, которое добавляет приличные теги перевода и плюрализации:
{% trans count=list|length %}
There is {{ count }} {{ name }} object.
{% pluralize %}
There are {{ count }} {{ name }} objects.
{% endtrans %}
Вы можете использовать это, даже если у вас на самом деле нет нескольких языковых версий, и если вы когда-либо добавляете другие языки, у вас будет достойная база, которая не требует изменений (не все языки плюрализуются путем добавления 's' и некоторые даже имеют множественные множественные формы).
Ответ 4
Вы также хотите проверить, нет ли слова уже множественного числа. Вот мое решение:
def pluralize(text):
if text[-1:] !='s':
return text+'s'
else:
return text
Затем зарегистрируйте тег в своей среде (это также можно применить к движку шаблонов Django).