我可能在这里遗漏了一些东西,但是有一个特殊的原因,即使将上下文传递给include,Django也不允许这样做吗?似乎有用(为了便于阅读)能够在block
内呈现include
因为它使得标记不那么密集 - 类似于Angular使用指令的方式。
是否有另一个模板标签可以实现这一目标?
示例
在下图中,navbar
是网站范围的,但navbar2
是视图相关的,并且位于所包含的content.html
内。这样可以实现更整洁的标记,因为您不会将每个块加载到骨架中......但是它无法正常工作。
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 %}
答案 0 :(得分:2)
因为include
不是从基地继承的,所以它没有合同要遵守。
通过extending
,您声明您的模板将包含基类正在寻找的构建块。
答案 1 :(得分:1)
这样想。当您使用“include”时,您将获得执行的输出,没有占位符/变量。
说过你可以创建一个content_base.html来只影响内容模板,但是错误地认为Django模板中不必要的块继承有太多的性能损失。此外,{%block%}比使用{%include%}更快。