2012-02-12 18 views
18

No puedo encontrar la manera de modificar bloques de plantillas incluidas utilizando Jinja2. Aquí hay un ejemplo donde uso tres archivos.Herencia de Jinja2 con bloques e incluye

base.html:

<html>{% include "content.html" %}</html> 

content.html:

<h1>{% block title %}Title{% endblock title%}</h1> 
<div>{% block content_body %}Content Body{% endblock content_body%}</div> 

story.html

{% extends "base.html" %} 
{% block title %}story.title{% endblock title %} 
{% block content_body %}story.description{% endblock content_body %} 

Cuando la prestación story.html, voy a conseguir:

<html> 
<h1>Title</h1> 
<div>Content Body</div> 
</html> 

¿Cómo puedo renderizar con los valores esperados?

+2

Dónde está @ArminRonacher cuando lo necesita - Tengo la sensación de que esto es causado por 'include" content.html "' anulando el contenido de los bloques con nombre idéntico en 'story' aunque' story' está anulando 'base '- pero no veo nada en la documentación que indique que esto es lo que se espera. –

Respuesta

5

Debe estar viendo macros en Jinja2. Creo que este SO question está relacionado con tus consultas.

12

base.html no se representa porque no está invocado por ninguna plantilla. Lo que podría hacer es un segundo nivel de extensión:

base.html:

<html>{% block html %}{% endblock %}</html> 

content.html:

{% extends "base.html" %} 
{% block html %} 
<h1>{% block title %}Title{% endblock title%}</h1> 
<div>{% block content_body %}Content Body{% endblock content_body%}</div> 
{% endblock %} 

Sin embargo, esto es algo excesivo, es probable que encuentre que una sola plantilla base es suficiente (es decir, combine base.html y content.html en una sola plantilla).

+0

esta es la solución adecuada para que las plantillas comprueben que las plantillas de django hagan algo similar para entender el concepto. – Bedros

Cuestiones relacionadas