【问题标题】:Injecting values from a child template into a parent template in Jinja2在 Jinja2 中将子模板中的值注入父模板
【发布时间】:2012-09-02 18:21:30
【问题描述】:

我创建了一个名为 course.html 的 Jinja2 模板,它定义了课程的基本结构。从中,我为每一节实际课程派生一个子模板(因为每节课的内容不同)。例如,intro.html、variables.html、lists.html 和 functions.html 都派生自 course.html。

除了幻灯片、练习等等,每节实际课程都有一个 YouTube 视频。我想将视频的 ID 放入子模板文件中,然后将实际引用视频的 HTML 放入父模板(即,lesson.html)中,以确保每个视频都以相同的方式引用和格式化。例如,我希望 course.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}}

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

是否有一种简洁的方式来定义子模板中的值以供父模板使用?

【问题讨论】:

  • 我假设您使用模板继承。 “在子模板中定义值”是什么意思?您可以在孩子的上下文中传递这些变量。
  • 您提出的解决方案是什么 greg?我想知道是否有可能的方法来做到这一点。
  • 从未找到答案...

标签: python jinja2


【解决方案1】:

可以使用set,DOC如下:

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

可以在here找到同样的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2014-02-11
    • 2017-03-01
    • 2021-09-12
    相关资源
    最近更新 更多