2009-12-14 23 views
19

La plantilla master en mi aplicación Django se ve así:bloques anidados en las plantillas de Django

{% block parent %} 
    Some text... 
    {% block child %} 
     Default content here... 
    {% endblock child %} 
    ...some more text 
{% endblock parent %} 

Ahora, esta plantilla se debe sobrescribir en una forma que se cambia el bloque child:

{% extends "master.html" %} 

{% block child %} 
    New content here... 
{% endblock child%} 

Sin embargo, la representación se mantiene igual (se imprime "contenido predeterminado aquí ..."). ¿Me he perdido algo obvio o los bloques anidados no son posibles? (O, violando el principio DRY, tienen que volver a definir el bloque de parent?)

Editar: estoy trabajando con Django 1.1, si lo que importa.

+2

Otra cosa que está mal aquí, porque (también usando 1.1) Soy incapaz de replicar este problema. Para mí, simplemente anulando el bloque secundario, sin ninguna referencia al bloque padre, tiene el efecto deseado. –

+0

Sí, tienes razón. Ver mi respuesta a continuación. Gracias por mirarlo. – Boldewyn

Respuesta

9

bien, se trata de un error en el sistema de plantillas de Django. Para la mayoría de los otros casos, Ben James tiene razón (ver su comentario a mi pregunta anterior).

En mi caso, el bloque child estaba dentro de un bloque de {% ifnotequal a b %}, y que rompe la herencia bloque. Considero que es un error, ya que hay docenas de casos de uso natural para tales operaciones.

The corresponding ticket.

+1

Es una buena idea para _test_ siempre el código envías, en lugar de asumir que lo que sacó no afectará el resultado. –

+0

verdad, es verdad ... Yo tenía una etiqueta de plantilla personalizada en ella en primer lugar, y sospechaba que, pero después de tirarla a la basura que no pensaba en el ifnotequal. – Boldewyn

1

hacer esto:

{% extends "master.html" %} 

{% block parent %} 
    {% block child %} 
     New content here... 
    {% endblock child%} 
{% endblock parent %} 
+3

¿Qué pasa si el bloque 'parent' base contiene algo más que el bloque' child'? –

+2

Gracias por la respuesta, pero desafortunadamente no es útil. Ese es en parte mi error, actualicé el ejemplo de la plantilla maestra anterior. Problema: el motivo de la plantilla maestra es que hay más datos en ella. Si hago lo que sugiere, toda esta información adicional, por supuesto, se pierde. – Boldewyn

Cuestiones relacionadas