Вставка значений из дочернего шаблона в родительский шаблон в Jinja2

Я создал шаблон Jinja2 под названием урок.html, который определяет базовую структуру урока. Из этого я получаю один дочерний шаблон для каждого фактического урока (поскольку содержание каждого урока отличается). Например, intro.html, variable.html, lists.html и functions.html — все они являются производными от Lesson.html.

Наряду со слайдами, упражнениями и прочим, к каждому реальному уроку есть видео на YouTube. Я хочу поместить идентификатор видео в файл дочернего шаблона, но затем поместить HTML-код, который фактически ссылается на видео, в родительский шаблон (т. Например, я хотел бы, чтобы урок.html выглядел так:

<div class="youtube"><br/>
    <iframe title="{{TITLE}}" time="{{TIME}}" src="http://www.youtube.com/embed/{{ID}}"></iframe>
<br/>
</div>

а затем задайте TITLE, TIME и ID в самом файле дочернего шаблона (поскольку это наиболее логичное место для их хранения). Мой текущий хак заключается в создании функции, которая принимает эти значения в качестве аргументов и возвращает блок HTML, который нужно вставить в нужное место:

{{youtube("Title of this Lecture", "abcde01234", "05:10")|safe}}

но (а) я бы предпочел использовать прямое расширение шаблона, а не вызовы функций, и (б) название, идентификатор YouTube и время явно не указаны в файле шаблона урока (что затрудняет их извлечение для использования в другом месте: я можно сделать это с помощью регулярных выражений, но я бы не хотел).

Есть ли простой способ определить значения в дочернем шаблоне для использования в родительском шаблоне?


person Greg Wilson    schedule 02.09.2012    source источник
comment
Я предполагаю, что вы используете наследование шаблонов. Что вы имеете в виду под определением значений в дочернем шаблоне? Вы можете передать эти переменные в контексте дочернего элемента.   -  person voscausa    schedule 03.09.2012
comment
Какое решение ты придумал, Грег? Я хотел бы знать, есть ли возможный способ сделать это.   -  person John Ruddell    schedule 21.01.2015
comment
Ответа так и не нашел...   -  person Greg Wilson    schedule 22.01.2015


Ответы (1)


Вы можете использовать set, DOC выглядит следующим образом:

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

Тот же вопрос можно найти здесь .

person selfboot    schedule 26.11.2016