Più blocchi dello stesso nome in Jinja2
Domanda
In Jinja2, Ho un modello base simile a questo:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{% block title %}{% endblock %} - example.com
</h1>
Jinja2, quindi, non riesce con il seguente messaggio:
lines = [self.message, ' ' + location]
: block 'title' defined twice
Deve essere evidente per quello che sto cercando di fare - avere lo stesso titolo, in due luoghi:il tag del TITOLO e i tag H1, ma la parte del titolo è in realtà fornito da altri modelli derivati.
Come si fa in genere ottenere questo?
Soluzione
Come documentato qui, la definizione di un blocco crea una macro con il nome del blocco nello speciale "self" oggetto:
<title>{% block title %}{% endblock %} - example.com</title>
[...]
<h1>
{{ self.title() }} - example.com
</h1>
Altri suggerimenti
L'idea è di creare un blocco all'interno di un macro e macro chiamata due volte, invece di avere un "blocco" tag ripetuta due volte.
In ultima Jinja2 versione funziona:
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 %}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow