的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 %}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top