Vários blocos de mesmo nome em Jinja2
Pergunta
Na Jinja2 , eu tenho um modelo de base como esta:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{% block title %}{% endblock %} - example.com
</h1>
Jinja2, então, falhar com a seguinte mensagem:
lines = [self.message, ' ' + location]
: block 'title' defined twice
Deve ser agora evidente, como o que eu estou tentando fazer - ter o mesmo título em dois lugares: o título de tag ea tag H1, mas a parte do título é efectivamente prestado por outros modelos derivados
Como é que uma pessoa normalmente conseguir isso?
Solução
Como documentado href="http://jinja.pocoo.org/2/documentation/templates#child-template" aqui , definindo um bloco cria uma macro com o nome do bloco no "eu" objeto especial:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{{ self.title() }} - example.com
</h1>
Outras dicas
A idéia é criar um bloco dentro de uma macro e, em seguida, chamar macro duas vezes, em vez de ter tag "block" repetido duas vezes.
Em última versão Jinja2 isso funciona:
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 %}