Как избежать рендеринга блока в базовом шаблоне - или: как определить многострочную блочную переменную?
Я довольно новичок в дзиндзя, поэтому прошу прощения за этот потенциально тупой вопрос...
У меня есть макрос дзиндзя в файле с именем 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
Теги решают мою проблему.