variable print last jinja for else async python templates jinja2

python - print - ¿Cómo repetir un bloque en una plantilla jinja2?



jinja2 async (1)

Estoy usando Jinja2 como motor de plantillas para un sitio HTML estático generado a través de un script de Python.

Quiero repetir el contenido de un bloque en la plantilla de diseño, que es algo como esto:

<html> <head> <title>{% block title %}{% endblock %} - {{ sitename }}</title> </head> <body> <h1>{% block title %}{% endblock %}</h1> <div id="content"> {% block content %}{% endblock %} </div> </body> </html>

Esta plantilla se ampliará en una plantilla de página, que se verá así:

{% extends "layout.html" %} {% block title %}Page title{% endblock %} {% block content %} Here goes the content {% endblock %}

Sin embargo, esto no funciona como esperaba, dando como resultado un error:

jinja2.exceptions.TemplateAssertionError: block ''title'' defined twice

Jinja interpreta el segundo {% block title %} en layout.html como una redefinición de bloques.

¿Cómo puedo repetir el contenido de un bloque en la misma plantilla usando jinja2?


Utilice la variable self especial para acceder al bloque por nombre:

<title>{% block title %}{% endblock %} - {{ sitename }}</title> <!-- ... snip ... --> <h1>{{ self.title() }}</h1>