Как передать выбранные, именованные аргументы в Jinja2 включить контекст?
Использование Django templating engine Я могу включить другой частичный шаблон при настройке настраиваемого контекста с использованием именованных аргументов, например:
{% include "list.html" with articles=articles_list1 only %}
{% include "list.html" with articles=articles_list2 only %}
Как вы можете предположить, articles_list1
и articles_list2
- это два разных списка, но я могу повторно использовать тот же шаблон list.html
, который будет использовать переменную articles
.
Я пытаюсь добиться того же самого, используя Jinja2, но я не вижу, что рекомендуется, поскольку ключевое слово with
не поддерживается.
Ответы
Ответ 1
Для читателей в 2017+ Jinja с 2.9
по умолчанию включает оператор with
. Расширение не требуется.
http://jinja.pocoo.org/docs/2.9/templates/#with-statement
В более старых версиях Jinja (до 2.9) требовалось включить эту функцию с расширением. Теперь он включен по умолчанию.
Ответ 2
Jinja2 имеет расширение, которое включает ключевое слово with
- оно не даст вам тот же синтаксис, что и Django, и может работать не так, как вы ожидаете, но вы можете сделать это :
{% with articles=articles_list1 %}
{% include "list.html" %}
{% endwith %}
{% with articles=articles_list2 %}
{% include "list.html" %}
{% endwith %}
Однако, если list.html
в основном просто функционирует как способ создания списка, тогда вы можете изменить его на macro
, вместо этого - это даст вам гораздо большую гибкость.
{% macro build_list(articles) %}
<ul>
{% for art in articles %}
<li>{{art}}</li>
{% endfor %}
</ul>
{% endmacro %}
{# And you call it thusly #}
{{ build_list(articles_list1) }}
{{ build_list(articles_list2) }}
Ответ 3
Таким образом вы можете передать несколько переменных в оператор Jinja2 Включить - (путем разбиения переменных по запятой внутри оператора С):
{% with var_1=123, var_2="value 2", var_3=500 %}
{% include "your_template.html" %}
{% endwith %}