Frage

Jinja2 , ich habe eine Basisvorlage wie folgt aus:

<title>{% block title %}{% endblock %} - example.com</title>
[...]

<h1> 
  {% block title %}{% endblock %} - example.com
</h1>

Jinja2, dann schlägt mit der folgenden Meldung an:

  lines = [self.message, '  ' + location]
: block 'title' defined twice

Es ist nun klar sein, was ich zu tun versucht - den gleichen Titel an zwei Stellen zu haben. Den Titel-Tag und den H1-Tag, aber den Teil des Titels tatsächlich von anderen abgeleiteten Vorlagen zur Verfügung gestellt

Wie man in der Regel erreicht das?

War es hilfreich?

Lösung

Wie dokumentiert hier , erstellt einen Block definieren, einen Makro mit der Name des Blockes in dem speziellen „selbst“ Objekt:

<title>{% block title %}{% endblock %} - example.com</title>
[...]

<h1> 
  {{ self.title() }} - example.com
</h1>

Andere Tipps

Die Idee ist, einen Block in einem Makro zu erstellen und dann Makro zweimal rief, statt mit „Block“ Tag zweimal wiederholt.

In neuester Jinja2 Version dies funktioniert:

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 %}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top