2010-10-21 10 views
11

Para ilustrar mi pregunta con más claridad, supongamos que tengo una plantilla include.html con contenido:Plantilla de Django: ¿Por qué el bloque en la plantilla incluida no puede ser sobrescrito por la plantilla secundaria?

{% block test_block %}This is include{% endblock %} 

tengo otra plantilla llamada Parent.html con el contenido de la siguiente manera:

This is parent 

{% include "include.html" %} 

Ahora crear una llamada child.html con plantilla que se extiende Parent.html:

{% extends "parent.html" %} 
{% block test_block %}This is child{% endblock %} 

Mi idea es que cuando se representa child.html, la test_block en el cap ild.html puede sobrescribir uno en include.html. Según mi entendimiento, cuando se incluye una plantilla, se incluye tal como está. Así que en mi caso, creo que es igual a Parent.html:

This is parent 

{% block test_block %}This is include{% endblock %} 

Así child.html debería ser capaz de sobreescribir test_block. Pero parece que no puede. ¿Por qué? ¿Hay alguna solución?

Respuesta

13

Cuando incluye una plantilla, la renderiza y luego incluye el contenido presentado.

De la documentación de Django:

La etiqueta include debe ser considerada como una implementación de "hacer que esta subtemplate e incluir el código HTML", no como "analizar esta subtemplate e incluir su contenido como si fuera parte del padre ". Esto significa que no hay un estado compartido entre las plantillas incluidas; cada inclusión es un proceso de representación completamente independiente.

Una solución sería tener la plantilla hija extender la incluido plantilla en lugar de la plantilla incluida. Luego, incluye la plantilla infantil.

Cuestiones relacionadas