django模板继承 - 用于多个子模板的views.py.

时间:2015-01-11 05:05:26

标签: django django-templates multiple-inheritance extends template-inheritance

我正在尝试创建base.html并在基础上加载名为“nav.html”,“contents.html”和“footer.html”的几个子模板。我想在base.html页面上加载所有三个子模板每当我访问/base.html时。

base.html文件:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>{% block title %}{% endblock %}</title>
  </head>

  <body>
    <nav class="navbar">
      <div class="nav">
        {% block nav %}{% endblock %}
      </div>
    </nav>

    <div class="content">
      {% block contents %}{% endblock %}
    </div>

    <div class="footer">
      {% block footer %}{% endblock %}
    </div>
  </body>
</html>

nav.html:

{% extends "base.html" %}

{% block title %}Page Title{% endblock %}

{% block nav %}
    <p>Here goes the nav</p>
{% endblock %}

contents.html:

{% extends "base.html" %}

{% block contents %}
    <p>Here goes the contents</p>
{% endblock %}

footer.html:

{% extends "base.html" %}

{% block footer %}
    <p>Here goes the footer</p>
{% endblock %}

现在,我的views.py看起来像是:

from django.shortcuts import render
from django.template.response import TemplateResponse

def index(request):
    return TemplateResponse(request, "main/base.html")

哪个不加载任何三个子模板,如果我加载其中一个子模板,如

from django.shortcuts import render
from django.template.response import TemplateResponse

def index(request):
    return TemplateResponse(request, "main/nav.html")

我无法加载其他两个子模板。我应该如何设置views.py文件,以便我可以通过仅加载/base.html来加载base.html上的所有三个子模板? (我认为没有位置问题。我认为我遇到的问题是如何正确设置“views.py”以获得预期结果。)

1 个答案:

答案 0 :(得分:3)

在您的区块中,使用base.html模板中的#include标记。

{% block nav %}
    {% include "nav.html" %}
{% endblock %}

这样,当您从base.html扩展新模板时,您只需覆盖块中的内容。