문제

~ 안에 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