将Django base.html模板划分为header,content和footer.html

时间:2017-01-02 07:05:31

标签: django django-templates

您好我已将Django Admin模板扩展到我的app / templates / admin目录中。 在该目录中,我有base.html包含

<header> header content<header>
<body> body Content </body>
<footer> Footer Content</footer>

所以我创建了包含

header.html
{% extends "admin/base_site.html" %}
<!-- I also tried to include base.html here-->
{% block header %}
 Header Html here...
{% endblock %}

并将base.html替换为以下内容

{% block header %}  {% endblock %}
<body> body content </body>
<footer> Footer Content </footer>

但是标题内容未加载..所以请建议。

2 个答案:

答案 0 :(得分:7)

在使用header.html的阻止标头之前使用 include

并且您不需要创建一个块来将HTML文件包含到另一个中。 在header.html文件中,只需编写头文件的代码即可。 像这样:

{% extends "admin/base_site.html" %}

     Header Html here...

并且,在您的base.html中尝试以下代码:

{% include "templates/header.html" %}

    <body> body content </body>
    <footer> Footer Content </footer>

注意:根据您的header.html位置使用包含&#34; templates / header.html&#34;

答案 1 :(得分:3)

你的方法中缺少一些东西。我们来看看管理员应用如何加载模板:

  1. 用户要求提供一个页面,例如/admin/
  2. 管理员应用中的相应视图处理请求。
  3. 该视图呈现index.html模板。
  4. 此模板扩展 base.html模板。
  5. 这就是全部。当您替换base.html模板并添加新块时,django会在index.html中查找此块定义。您的新标头文件无处可参与此过程。

    无论您对模板做什么,django都会尝试渲染相应的视图模板,例如index.html(除非您自己更改视图)。因此,您可以选择覆盖从上一个向下延伸到第一个扩展的任何模板。

    正如Prakhar的回答所建议的那样,为了让django确认你的新标题模板文件,你需要使用include指令。

    如果这不起作用,请确保使用基本文件和包含文件的正确路径。

    请同时考虑到包含的内容远远超出扩展或简单覆盖的性能。