"替换 {{ super() }} 内部的区块"

2024-05-04 15:56:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基本模板,其中包含用于默认<head>内容的块。在头块中,有一个用于<title>的块。

例如,在基本文件中,我将拥有:

<head>
    {% block head %}
    {% block title %}<title>An App</title>{% endblock title %}
    <script src="somescript.js"></script>
    {% endblock head %}
</head>

在子模板中,我希望包含从基块开始的头块中的所有内容(通过调用{{ super()) }}),并包含一些附加内容,同时替换超级调用中的标题块。

有没有一种方法可以做到这一点,而不只是在头部内容(不包括标题)的其他部分加上一个块,然后全部替换掉?


Tags: 文件srcan模板app标题内容title
1条回答
网友
1楼 · 发布于 2024-05-04 15:56:45

不要调用super。在子模板中,可以执行以下操作:

{% extends "base.html" %}
{% block title %}<title>This is my new TITLE</title>{% endblock %}

Jinja将父级中的所有块替换为子级中定义的块,如果不提供新定义,它将使用父级中的定义。因此它将呈现为:

<head>

    <title>TITLE</title>
    <script src="somescript.js"></script>

</head>

如果希望在父块中使用块的默认值,可以调用super

{% extends "base.html" %}
{% block title %}<title>TITLE</title>{{ super() }}{% endblock %}

这表现为:

<head>

    <title>TITLE</title><title>An App</title>
    <script src="somescript.js"></script>

</head>

如果要添加更多脚本,只需在基本模板中创建占位符块:

<head>
    {% block head %}
    {% block title %}<title>An App</title>{% endblock title %}
    <script src="somescript.js"></script>
    {% block moreScripts %}{% endblock moreScripts %}
    {% endblock head %}
</head>

并将其用于:

{% extends "base.html" %}
{% block title %}<title>TITLE</title>{% endblock %}
{% block moreScripts %}
<script src="somescript1.js"></script>
<script src="somescript2.js"></script>
<script src="somescript3.js"></script>
{% endblock moreScripts %}

相关问题 更多 >