Как плюрализировать имя в шаблоне с помощью 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).