【问题标题】:Jinja2 Inheritance with Blocks and IncludesJinja2 继承与块和包含
【发布时间】: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 @ - 但我在文档中没有看到任何表明这是可以预期的。

标签: python pyramid jinja2


【解决方案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.htmlcontent.html 组合成一个模板)。

【讨论】:

  • 这是模板检查 django 模板的正确解决方案,他们会做类似的事情来理解这个概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多