题
在的Jinja2 时,我有一个基本模板是这样的:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{% block title %}{% endblock %} - example.com
</h1>
的Jinja2,然后,失败,出现以下消息:
lines = [self.message, ' ' + location]
: block 'title' defined twice
现在一定是为了什么,我试图做明显的 - 有两处相同的标题:标题标签和H1标签,但标题的部分实际上是由其他来源的模板提供
一个人如何典型地实现这一目标?
解决方案
作为记录此处,定义一个块创建具有一个宏在特殊的“自我”对象块的名称:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{{ self.title() }} - example.com
</h1>
其他提示
我们的想法是创建一个内部宏块,然后调用宏两次,而不是具有“块”的标签重复两次。
在最新版本的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 %}
不隶属于 StackOverflow