python - 包含文件中的 block 未被扩展模板填充

标签 python flask jinja2

我有一个如下所示的模板:

{% include "base/top.html" with context %}
{% include "base/nav.html" with context %}
<div id="content">
    Stuff
    {% block content %}{% endblock %}
</div>
{% include "base/bottom.html" with context %}

base/nav.htmlbase/bottom.html 包含静态内容,但 base/top.html 包含 {% block 标题 %}。因此,当我有第二个模板时,它会尝试从第一个文件继承,如下所示:

{% extends firstfile.html %}
{% block title %}Imarealpage!{% endblock %}
{% block content %}Lorem ipsum dorem smitshm{% endblock %}

{% block title %} 部分未呈现。如何确保它以及包含文件中和扩展模板中定义的任何其他 block 按应有的方式呈现?

最佳答案

您误解了 {% include %} 的工作原理。 {% include %} 标签不是预处理器;它不会在渲染之前将包含模板的代码直接放入包含模板中。相反,{% include %} 会触发包含模板的新独立模板渲染(就像您直接从自己的代码渲染包含模板一样),然后包含渲染的 结果进入所包含模板的渲染中。

这意味着包含模板具有与其包含模板完全独立的继承层次结构。例如,您可以有一个基本的 component.html 模板,其中包含一些 block ,然后有例如foo-component.html{% extends "component.html"%} 开头,并填充 component.html 中的一些 block 。然后你可以有一个 layout.html ,它会 {% include "foo-component.html"%} ,并且将渲染 foo-component.html ,完成其对 component.html 的继承,并将结果放入 layout.html 中的该位置。但是 layout.html 中的任何 block 和 component.html 中的任何 block 之间的关系为零 - 它们是具有单独 block 结构和继承层次结构的单独渲染。

关于python - 包含文件中的 block 未被扩展模板填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15058974/

相关文章:

python - 在 Google App Engine 中开始使用 Python

macros - 从 Jinja2 宏中访问外部变量

python - 如何在 selenium Python 中为 Chrome 设置带有 auth 的 SOCKS5 代理?

python - 使用 OpenCV 图像的 Flask 视频流

python - Flask 应用程序无法为请求创建 URL 适配器

python - 动态添加周期性任务 celery

google-app-engine - 从 Jinja2 下拉菜单将变量传递给 Python

python - 在 Python 中应用 cdll 的处理程序问题

python - Pandas:获取具有列值的行并用另一个值更新注释列

python - 对话流 : 403 IAM permission 'dialogflow.sessions.detectIntent'