Подтвердить что ты не робот

Как передать выбранные, именованные аргументы в 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 не поддерживается.

4b9b3361

Ответ 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 %}