Как избежать рендеринга блока в базовом шаблоне - или: как определить многострочную блочную переменную?

Я довольно новичок в дзиндзя, поэтому прошу прощения за этот потенциально тупой вопрос...

У меня есть макрос дзиндзя в файле с именем lib.jinja который выглядит следующим образом

{% macro some_macro(some_content) %}
    <div class="some_class">{{ some_content }}</div>
{%- endmacro %}

Я импортирую его из другого файла с именем content.htm, который выглядит примерно так:

{% from "lib.jinja" import some_macro %}
{% block content %}
    Some content
{% endblock %}
{{ some_macro(self.some_macro(self.content())) }}

Визуализированный вывод выглядит следующим образом:

Some content
<div class="some_class">Some content</div>

Обратите внимание, что содержимое появляется дважды: один раз визуализируется с помощью макроса /, другой раз - прямо над ним - отображается так, как это было определено в блоке с именем content в content.htm, Я хотел бы избежать того, чтобы блок отображался дважды - он должен передаваться в макрос и обрабатываться только через него.

Кажется, я могу "обойти" его, повернув content.htm в дочерний шаблон (добавив extends тег вверху) пустого базового шаблона.

Может быть, у меня нет понимания понятий здесь: блок не является переменной - я понимаю. Если нет extends тег, шаблон рассматривается как базовый шаблон, я полагаю. Если нет дочерних шаблонов или других директив, я думаю, блок просто отображается как есть, а затем, во второй раз, так сказать, подобран макросом - правильно?

Как я могу решить это разумным образом, то есть, как я могу справиться с этим иначе, чем путем расширения пустого базового шаблона? Есть ли другой тип блока или переменной, которые бы соответствовали моим потребностям?

1 ответ

Решение

Сразу после того, как я отправил этот вопрос, я, наконец, нашел то, что искал в руководстве: Назначение блоков.

{% from "lib.jinja" import some_macro %}
{% set content %}
    Some content
{% endset %}
{{ some_macro(self.some_macro(content)) }}

set а также endset Теги решают мою проблему.

Другие вопросы по тегам