我想知道是否有人知道如何处理以下古怪的模板 struct :
### base.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title> {% block title %} Title of the page {% endblock %} </title>
</head>
<body>
<header>
{% block header %}
{% include "base/header.html" %}
{% endblock header %}
</header>
{% block content %}{% endblock %}
</body>
</html>
### base/header.html
<div id="menu-bar">
{% block nav %}
{% include "base/nav.html" %}
{% endblock %}
</div>
### base/nav.html
<nav id="menu">
<ul>
<li>
<a href="/profile/">My Profile</a>
</li>
<li>
<a href="/favs/">My Favorites</a>
</li>
{% block extra-content %}{% endblock %}
</ul>
</nav>
而且,问题的核心是:
### app/somepage.html
{% extends "base.html" %}
{% block content %}
<p>Content is overridden!</p>
{% endblock %}
{% block extra-content %}
<p>This will not show up, though...</p>
{% endblock %}
{% block nav %}
<p>Not even this.</p>
{% endblock %}
问题是,在扩展模板时,只能覆盖仅在父级中声明的块,而不能覆盖其任何子级.
我想我可以使base.html成为覆盖所有future 意外情况的空的、未使用的嵌套块的shell ,但即使这样也能正确覆盖吗?这是唯一的办法吗?
如果你想知道为什么我有一个双向的包括/扩展工作流程围绕基地.html,我有很多子模板,我想在整个项目中使用:页眉、页脚、导航、侧边栏等.它们在整个网站的 struct 上都是一致的,但在许多情况下,整个网站的细分只需要其中的几个子模板.我的 idea 是在templates/base文件夹下定义子模板,并使用templates/base-type1.html,模板/base-type2.html等扩展到其他地方.每种类型只会引用所需的子模板,并覆盖它们以根据需要放置内容.