Как передать выбранные, именованные аргументы в контекст включения Jinja2? - PullRequest
56 голосов
/ 23 февраля 2012

Используя движок шаблонов Django, я могу включить другой частичный шаблон при настройке пользовательского контекста, используя именованные аргументы, например:

{% 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 не поддерживается.

Ответы [ 3 ]

111 голосов
/ 23 февраля 2012

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) }}
35 голосов
/ 18 сентября 2015

Таким образом, вы можете передать несколько переменных в Jinja2 Включить оператор - (разделив переменные запятыми внутри С оператором ):

            {% with var_1=123, var_2="value 2", var_3=500 %}
                {% include "your_template.html" %}
            {% endwith %}
20 голосов
/ 01 мая 2017

Для читателей в 2017+ году Jinja с 2.9 по умолчанию включает оператор with. Расширение не требуется.

http://jinja.pocoo.org/docs/2.9/templates/#with-statement

В более старых версиях Jinja (до версии 2.9) требовалось включить эту функцию с расширением. Теперь он включен по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...