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

Я довольно новичок в jinja, поэтому, пожалуйста, извините за этот потенциально глупый вопрос ...

У меня есть макрос jinja, расположенный в файле с именем 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 Ответ

0 голосов
/ 11 июня 2018

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

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

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

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