Jinja2 继承与块和包含
Posted
技术标签:
【中文标题】Jinja2 继承与块和包含【英文标题】:Jinja2 Inheritance with Blocks and Includes 【发布时间】:2012-03-03 23:31:59 【问题描述】:我不知道如何使用 Jinja2 从包含的模板中修改块。这是我使用三个文件的示例。
base.html:
<html>% include "content.html" %</html>
content.html:
<h1>% block title %Title% endblock title%</h1>
<div>% block content_body %Content Body% endblock content_body%</div>
故事.html
% extends "base.html" %
% block title %story.title% endblock title %
% block content_body %story.description% endblock content_body %
渲染story.html时,我会得到:
<html>
<h1>Title</h1>
<div>Content Body</div>
</html>
如何使用预期值进行渲染?
【问题讨论】:
您应该在 Jinja2 中查看 宏。我认为这个SO question 与您的查询有关。 当你需要他时,@ArminRonacher 在哪里 - 我感觉这是由include "content.html"
覆盖 story
中同名块的内容引起的,即使 story
覆盖 @987654329 @ - 但我在文档中没有看到任何表明这是可以预期的。
【参考方案1】:
base.html
没有被渲染,因为它没有被任何模板调用。您可以做的是第二级扩展:
base.html:
<html>% block html %% endblock %</html>
content.html:
% extends "base.html" %
% block html %
<h1>% block title %Title% endblock title%</h1>
<div>% block content_body %Content Body% endblock content_body%</div>
% endblock %
不过,这可能有点矫枉过正,您可能会发现一个基本模板就足够了(即将base.html
和content.html
组合成一个模板)。
【讨论】:
这是模板检查 django 模板的正确解决方案,他们会做类似的事情来理解这个概念。以上是关于Jinja2 继承与块和包含的主要内容,如果未能解决你的问题,请参考以下文章