为什么Django禁止内部包含块?

时间:2016-05-19 20:15:20

标签: django django-templates

我可能在这里遗漏了一些东西,但是有一个特殊的原因,即使将上下文传递给include,Django也不允许这样做吗?似乎有用(为了便于阅读)能够在block内呈现include因为它使得标记不那么密集 - 类似于Angular使用指令的方式。

是否有另一个模板标签可以实现这一目标?

示例 在下图中,navbar是网站范围的,但navbar2是视图相关的,并且位于所包含的content.html内。这样可以实现更整洁的标记,因为您不会将每个块加载到骨架中......但是它无法正常工作。

Basic Admin Dashboard

base.html文件

<html>  
    <head>
    ...
    </head>
    <body>
        <nav>
            {% block navbar %}
            {% endblock %}
        </nav>

        {% include "content.html" %}

        {% include "footer.html" %}
    </body>
</html>

content.html

<header>{{ request.view_name }}</header>

<nav>
    {% block navbar2 %} 
    {% endblock %}
</nav>

{% block content %}
{% endblock %}

模型list.html

{% extends "base.html" %}

{% block navbar2 %}
    {% for action in view_actions %}
        <li>{{ action }}</li>
    {% endfor %}
{% endblock %}

2 个答案:

答案 0 :(得分:2)

因为include不是从基地继承的,所以它没有合同要遵守。

通过extending,您声明您的模板将包含基类正在寻找的构建块。

答案 1 :(得分:1)

这样想。当您使用“include”时,您将获得执行的输出,没有占位符/变量。

说过你可以创建一个content_base.html来只影响内容模板,但是错误地认为Django模板中不必要的块继承有太多的性能损失。此外,{%block%}比使用{%include%}更快。