我在使用 Jinja2 扩展和导入时遇到问题。
base_admin.html
<html>
<body>
<div class="outerbody">
<somehtml code>
{% include "base_admin_nav.html" %}
{% include "base_admin_sidebar.html" %}
{% include "base_admin_content.html" %}
</div>
</body>
</html>
base_admin_content.html
<div class="innerbody">
{% block body_content %}
{% endblock %}
</div>
admin.html
{% extends 'base_admin.html' %}
{% block body_content %}
<div>BodyContent</div>
{% endblock %}
body_content 中的代码不会传递给 base_admin_content.html。任何解决方法?
注意
This is not duplicate of this one jinja2: blocks in included files.. The include is done in different files here
Defining
{% macro admin_content() %}
insdidebase_admin_content.html
and importing it insidebase_admin.html
using
{% from "base_admin_content.html" import admin_content with context %}
{{ admin_content() }}.
also has no effect.
最佳答案
已编辑 - 以反射(reflect)原始问题的变化
好吧,既然我知道你肯定需要包含,我会这样做:而不是包含 base_admin_content.html
文件,你应该包含 admin.html
文件直接写入 base_admin.html
。 admin.html
文件将扩展 base_admin_content.html
并且一切正常:
base_admin.html
<html>
<body>
<div class="outerbody">
<somehtml code>
{% include 'admin.html' %}
</div>
</body>
</html>
admin.html
{% extends 'base_admin_content.html' %}
{% block body_content %}
<div>BodyContent</div>
{% endblock %}
base_admin_content.html
{% block innerbody %}
<div class="innerbody">
{% block body_content %}
{% endblock %}
</div>
{% endblock %}
为什么这行得通而您的原始代码却行不通?
在你的 base_admin.html
文件中你有
{% include 'base_admin_content.html' %}
我们没有引用 admin.html,这就是为什么 admin.html 文件没有显示的原因!。因此,我们应该这样做:
{% include 'admin.html' %}
因为在扩展行中确实包含对 base_admin_content 的引用:
{% extends 'base_admin_content.html' %}
希望这是有道理的...
关于python - Jinja2:如何在包含的模板、可扩展模板中使用命名 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21729864/