在Jinja2中将子模板中的值注入父模板

时间:2012-09-02 18:21:30

标签: python jinja2

我创建了一个名为lesson.html的Jinja2模板,用于定义课程的基本结构。由此,我为每个实际课程派生了一个儿童模板(因为每节课的内容不同)。例如,intro.html,variables.html,lists.html和functions.html都派生自lesson.html。

除了幻灯片,练习和什么不是,每个实际课程都有YouTube视频。我想将视频的ID放在子模板文件中,然后将实际引用视频的HTML放在父模板(即lesson.html)中,以确保以相同的方式引用和格式化每个视频。例如,我希望lesson.html看起来像:

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

然后在子模板文件本身中定义了TITLE,TIME和ID(因为这是存储它们的最合理的位置)。我当前的hack是创建一个函数,它将这些值作为参数并返回一个HTML插件,以便插入到正确的位置:

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

但是(a)我宁愿使用直接模板扩展而不是函数调用,并且(b)课程模板文件中没有明确标识标题,YouTube ID和时间(这使得它们更难以提取使用其他地方:我可以用正则表达式来做,但我真的不愿意。)

是否有一种干净的方法来定义子模板中的值以便在父模板中使用?

1 个答案:

答案 0 :(得分:0)

您可以使用set,DOC如下:

  

在内部代码块中,您还可以为变量赋值。顶级(块,宏或循环之外)的分配从顶层宏等模板导出,并可由其他模板导入。

可以找到同样的问题here