Django多级模板扩展和嵌套块

Kry*_*ski 27 django django-templates

假设我有三个html模板文件,如下所示.HTML只是为了说明这一点.

是否有可能以某种方式在名为extra_head_content的块中嵌套名为extra_head_content的块.我们的想法是允许第三级模板提供名为extra_head_content的块.上面的模板接受该内容,将其添加到名为extra_head_content的块中,并将此组合块提供给其父模板.

基本上,我正在寻找跨继承模板文件的块嵌套.

我试图解决的确切场景是任何模板都应该能够向head元素添加额外的javascript或css文件.但是,最低模板不应该关心它嵌套了多少级别.类似地,由中间模板提供的额外头部内容不应被终端模板的块元素覆盖.

base.html文件

<html>
<head>
    <link rel="stylesheet" type="text/css" href="/static/css/reset.css" />
    {% block extra_head_content %}{% endblock %}
</head>
<body>{% block content %}{% endblock %}
</html>
Run Code Online (Sandbox Code Playgroud)

account.html

{% extends "base.html" %}

{% block extra_head_content  %}
    <link rel="stylesheet" type="text/css" href="/static/css/account.css" />
    {% block extra_head_content  %}{% endblock %}
{% endblock %}

{% block content %}
    <div id="menu">...</div>
    {% block account_content %}{% endblock %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

account_profile.html

{% extends "account.html" %}

{% block extra_head_content  %}
    <link rel="stylesheet" type="text/css" href="/static/css/edit_profile.css" />
{% endblock %}

{% block account_content %}
    Welcome to your profile
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

Chr*_*att 52

不,但你可以使用{{ block.super }}:

{% block extra_head_content  %}
    {{ block.super }}
    <link rel="stylesheet" type="text/css" href="/static/css/account.css" />
{% endblock %}
Run Code Online (Sandbox Code Playgroud)