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?

È stato utile?

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
scroll top