Question

Jinja2 , j'ai un modèle de base comme ceci:

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

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

Jinja2, puis, échoue avec le message suivant:

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

Il doit être maintenant évident à ce que je suis en train de faire - d'avoir le même titre en deux endroits:. La balise TITLE et la balise H1, mais la partie du titre est effectivement fourni par d'autres modèles dérivés

Comment peut-on atteindre en général cela?

Était-ce utile?

La solution

Comme indiqué , la définition d'un bloc crée une macro avec la nom du bloc dans l'objet « auto » spécial:

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

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

Autres conseils

L'idée est de créer un bloc à l'intérieur d'une macro, puis appeler deux fois macro, au lieu d'avoir la balise « bloc » répété deux fois.

Dans dernière version Jinja2 ceci fonctionne:

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 %}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top