Я разработал собственную систему i18n в Jinja2 на основе следующего фильтра (упрощенно):
@contextfilter
def render(context, value):
"""
Renders the filtered value as a string template, using the context
and environment of the caller template.
"""
mini_template = _environment.from_string(value)
return mini_template.render(context)
Это позволяет мне, например, создать следующий контекст:
context = {
'user': {
'name': 'Joel',
'locale': 'es'
}
'greetings': {
'en': 'Hi {{user.name}}!',
'es': '¡Hola {{user.name}}!'
}
}
И используйте это в моих шаблонах так:
{{ greetings[user.locale]|render() }}
Это прекрасно работает.
Теперь представьте, что у меня есть массив пользователей вместо одного.Я делал следующее в шаблонах Django, но это не работает в Jinja2, потому что переменная 'user' не находится в контексте:
{% for user in list_of_users %}
{{ greetings[user.locale]|render() }}
{% endfor %}
Могу ли я что-нибудь сделать, чтобы добавить новую переменнуюпользователь) в контекст, который я использую в contextfilter?Мне нужно добавить и его имя, и значение, если я хочу, чтобы он работал.
Большое спасибо за вашу помощь.