Jinja2: вызов переменной невозможен в пределах уценки из двух разных шаблонов с использованием jinja2

Я использую jinj2 внутри файлов уценки для создания шаблона документации через Mkdocs.

Весь процесс создается через конвейер, поэтому я могу видеть, что делает код jinja2, который я пишу в своих шаблонах, но есть одна конкретная проблема, которая блокирует меня прямо сейчас:

скажем, у меня есть template1.md и template2.md и один файл var, который называется file2.yml

vars, которые находятся внутри file2.yml, - это автомобили, которые включены в template2.yml, и его содержимое похоже на это:

      squads:
  
  - name: squad_name
    mail: squad@mail.com
    env_responsiblity: test

на template2.md и после обработки команды jinja2 поля заполнены правильно, так что пока все в порядке.

я хочу вызвать значение env_responsibility внутри моего второго template1.md следующим образом:

      {% import 'template2.md' as t %}

#{{environement}}

##Responsibility

{% if environement = t.env_responsibility %}

The environement {{environement}} is under the responsability of the {{t.squad.name}}

{% endif }%

Я уверен, что вызов имени отряда и env_responsibility не работает, но у меня нет ошибки, которая могла бы указать, что не так.

Может ли кто-нибудь помочь выделить проблему?

2 ответа

Невозможно импортировать переменные, вставленные в шаблон, поскольку они доступны только при визуализации шаблона и не сохраняются в контексте впоследствии. Переменные, которые вы можете импортировать из одного шаблона в другой, - это переменные, написанные на языке jinja. Например

Template_1

      {{ rendered_variable }}
{% set jinja_variable = "Something" %}

Шаблон_2

      {% import "template_1" as t %}

This does not work: {{ t.rendered_variable }}
This works: {{ t.jinja_variable }}

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

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

https://jinja.palletsprojects.com/en/2.11.x/templates/#import-visibility

С другой стороны, кажется, вы можете попытаться поместить содержимое своего ymlв ваш контекст рендеринга перед рендерингом чего-либо, как уже сказал Александр. Таким образом, данные будут доступны во всех ваших шаблонах.

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