gol*_*enk 2 python templates jinja2
我有一个基本模板,其中包含默认<head>内容的块.在头部区域内,有一个区块<title>.
例如,在基本文件中我会:
<head>
{% block head %}
{% block title %}<title>An App</title>{% endblock title %}
<script src="somescript.js"></script>
{% endblock head %}
</head>
Run Code Online (Sandbox Code Playgroud)
在子模板中,我想从基数中包含头块中的所有内容(通过调用{{ super()) }}并包含一些其他内容,但同时替换超级调用中的标题块.
有没有办法做到这一点,而不只是围绕头部内容的其余部分(不包括标题),并只是替换所有这些?
Alv*_*tes 11
不要打电话super.在您的孩子模板中,您可以:
{% extends "base.html" %}
{% block title %}<title>This is my new TITLE</title>{% endblock %}
Run Code Online (Sandbox Code Playgroud)
Jinja用子节点中定义的块替换父节点中的所有块,如果不提供新定义,它将使用父节点中的定义.所以它将呈现为:
<head>
<title>TITLE</title>
<script src="somescript.js"></script>
</head>
Run Code Online (Sandbox Code Playgroud)
super如果要在父级中使用块的默认值,则调用:
{% extends "base.html" %}
{% block title %}<title>TITLE</title>{{ super() }}{% endblock %}
Run Code Online (Sandbox Code Playgroud)
这呈现为:
<head>
<title>TITLE</title><title>An App</title>
<script src="somescript.js"></script>
</head>
Run Code Online (Sandbox Code Playgroud)
如果要添加更多脚本,只需在基本模板中创建占位符块:
<head>
{% block head %}
{% block title %}<title>An App</title>{% endblock title %}
<script src="somescript.js"></script>
{% block moreScripts %}{% endblock moreScripts %}
{% endblock head %}
</head>
Run Code Online (Sandbox Code Playgroud)
并使用它如:
{% 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 %}
Run Code Online (Sandbox Code Playgroud)