使用{{block.super}}

时间:2019-04-14 13:05:51

标签: django django-templates

我有一个第三方应用程序,该应用程序定义了一堆模板(有点类似于django-admin的工作方式)。基本模板定义了一个包含一些内容的块:

base.html:

<!doctype HTML>

<html><head>
<!-- blah blah -->

{% block very_kewl %}
    <marquee><b><i><u>this is very kewl</marquee></b></i></u>
    <!-- disclaimer: this is not valid HTML! -->
{% endblock very_kewl %}

</html>

然后,子模板清除该块:

actual_page.html:

{% extends 'base.html' %}

{# very many other stuff, part 1 #}

{% block very_kewl %}{% endblock %}

{# very many other stuff, part 2 #}

我想要实现的是将“非常扭曲”的内容保留在页面上。

一种可行的方法是简单地将整个actual_page.html复制到项目模板目录中,并省略行{% block very_kewl %}{% endblock %}。这行得通,但缺点是我还必须重复模板的所有其他部分,其中一些将来可能会更改。

所以问题是如何显示基本模板中的“非常扭曲”的内容而又不重复actual_page.html中的所有其他内容

理想情况下,我可以做类似的事情,但这当然行不通:

project_templates/actual_page.html:

{% extends 'actual_page.html' %}

{% block very_kewl %}{{ block.super.super }}{% endblock %}

1 个答案:

答案 0 :(得分:0)

为什么不将基本模板块中使用的HTML保留为单独的模板?

project_template/partials/very_kewl.html

<marquee><b><i><u>this is very kewl</marquee></b></i></u>
<!-- disclaimer: this is not valid HTML! -->

现在,只需在需要使用HTML的地方添加它即可。

project_template/base.html

<!doctype HTML>

<html><head>
<!-- blah blah -->

{% block very_kewl %}
    {% include 'partials/very_kewl.html' %}
{% endblock very_kewl %}

</html>

在孙子project_templates/actual_page.html

{% extends 'actual_page.html' %}

{% block very_kewl %}{% include 'partials/very_kewl.html' %}{% endblock %}

因此,即使在某个时候清除了该块,该模板的子元素也可以简单地包含所需的HTML。