Saltar al contenido

¿Herencia de plantilla de nivel múltiple en Jinja2?

Solución:

Una de las mejores maneras de lograr múltiples niveles de plantillas usando jinja2 es usar ‘incluir’ digamos que tienes ‘base_layout.html‘como plantilla base

<!DOCTYPE html>
<title>Base Layout</title>
<div>
  <h1>Base</h1>
  .... // write your code here
  {% block body %}{% endblock %}
</div>

y luego quieres tener ‘child_layout.html‘que extiende’ base_layout.

{% include "base_layout.html" %}
  <div>
  ... // write your code here
  </div>
{% block body %}{% endblock %}

y ahora tu página puede simplemente extenderse ‘child_layout.html‘y tendrá ambos base_layout.html y child_layout.html

{% extends "child_layout.html" %}
{% block body %}
  ...// write your code here
{% endblock %}

Por la forma en que la documentación estaba redactada, parecía que no admitía niveles de herencia (n) de profundidad.

A diferencia de Python, Jinja no admite herencia múltiple. Por lo tanto, solo puede tener una etiqueta de extensión llamada por representación.

No sabía que era solo una regla que decía 1 extensión por plantilla … Ahora lo sé, con algo de ayuda del canal jinja irc.

Prueba esto, esto funciona para mí gracias a la respuesta de @Ixm.

base.html

<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
      {% block content %}{% endblock %}
    </body>
</html>

content.html

{% extends "base.html" %}
{% block content %}
<table>
  <tr>
  {% include "footer.html" %}
  </tr>
</table>
{% endblock %}

footer.html

{% block footer %} <td> test</td>{% endblock %}

y llama con

env = Environment(loader=FileSystemLoader(os.path.join(path, "Layouts")))
template = env.get_template('content.html')
html = template.render()
print html
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *