我想知道是否有人知道如何处理以下古怪的模板 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等扩展到其他地方.每种类型只会引用所需的子模板,并覆盖它们以根据需要放置内容.

推荐答案

您可以通过扩展当前包含的模板,然后包含扩展,而不是当前包含的基础模板来解决这个问题.

Django相关问答推荐

如何在Django模型mixin字段定义中引用模型名称?

Django REST framework:object has no attributed after annotation;Got attributeError when try to get a value for field field on serializer<>

Django-无法显示基于字段值的元素

Django:不能在子函数中返回重定向异常.第一个功能继续

Django allauth 社交帐户注册中邮箱的模板变量

如何在Django管理自定义筛选器中包含自定义模型方法?

一次请求中更新整个Django模型

身份验证有效,但登录无效.一直卡在pending

Django:使用相同的外键在不同的应用程序中 Select 多个列

如何让两个模型相互引用 Django

如果上下文中缺少变量,如何使 Django 模板引发错误

更好的 ArrayField 管理小部件?

在 django 中获取本地时区

无效的命令 WSGIDaemonProcess 在 CentOS 6.7 上部署 Django 应用程序

有 Django List View 模型排序吗?

Django JavaScript 文件

无效的块标签: static

django过滤器超过几天?

用于创建和更新的基于 Django 类的视图

Django的不区分大小写的网址?