在Jinja2中,我有一个这样的基本模板:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{% block title %}{% endblock %} - example.com
</h1>
然后,Jinja2失败并显示以下消息:
lines = [self.message, ' ' + location]
: block 'title' defined twice
现在必须明白我要做的事情 - 在两个地方拥有相同的标题:TITLE标签和H1标签,但标题的一部分实际上是由其他派生模板提供的。
通常如何实现这一目标?
答案 0 :(得分:62)
如记录here,定义一个块会在特殊的“self”对象中创建一个带有块名称的宏:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{{ self.title() }} - example.com
</h1>
答案 1 :(得分:0)
这个想法是在宏内创建一个块,然后两次调用宏,而不是重复两次“ block”标签。
在最新的Jinja2版本中,此方法有效:
layout.html
{%- extends "base.html" -%}
{%- macro duplicated() -%}
{% block overrideninchild %}{% endblock %}
{%- endmacro -%}
{% block base_content %}
{{ duplicated() }}
{{ duplicated() }}
{% endblock %}
child_page.html
{%- extends "layout.html" -%}
{% block overrideninchild %}
Should be visible twice.
{% endblock %}