Plantillas django anidadas

Esto parece ser algo bastante básico, pero aunque he estado usando Django durante aproximadamente un año, nunca me he encontrado con este escenario todavía.

En muchos marcos de plantillas / web, la herencia de plantillas funciona de manera un poco diferente, ya que generalmente se comporta más como envoltorios, por lo que si tiene childtemplate.html, parenttemplate.html y grandparenttemplate.html, la representación final generalmente se ve algo me gusta

grandparent header
    parent header
        child header
        child content
    parent content
    parent footer
grandparent content
grandparent footer

Así no es exactamente cómo funciona en Django, pero me pregunto cómo implementarlo.

Específicamente tengo mi plantilla "hijo", digamos que esfoo.html. foo.html opcional obtiene una variableparent_template o el valor predeterminado es "base.html"

{% extends parent_template|default:"base.html" %}

{% block content %}
I am a foo and my title is {{ foo.title }}
{% endblock content %}

Entonces, aquí es donde me encuentro con un inconveniente. Siparent_template es una plantilla, esa plantilla debe envolver el contenido defoo.html y luego coloque el resultado enbase.html:

{% extends "base.html" %}

{% something_magical_here %}
<div>parent header</div>
# content of foo.html
<div>parent footer</div>
{% end_something_magical_here %}

Y luego enbase.html:

<html>
... snip ...
<div id="content">
{% something_else_magical %}
# content of parent_template rendering, or just foo.html if no parent_template given
{% end_something_else_magical %}

Que debería renderizarse como

<html>
... snip ...
<div id="content">
<div>parent header</div> 
I am a foo and my title is Bar
<div>parent footer</div>

if parent_template está configurado y

<html>
... snip ...
<div id="content">
I am a foo and my title is Bar

,si no es

Espero que mi problema sea claro: necesito (opcionalmente) envolver una plantilla en una plantilla principal y luego enviar los resultados a labase.html modelo

Normalmente, algo como esto podría funcionar:

#foo.html
{% extends "parent.html" %}
{% block child_content %}
I am a foo and my title is {{ foo.title }}
{% endblock child_content %}

#parent.html
{% extends "base.html" %}

{% block content %}
parent header
{% block child_content %}{% endblock child_content %}
parent content
parent footer

#base.html
base header
{% block content %}{% endblock content %}
base content
base footer

Sin embargo, dado que parent_template podría estar en blanco, a veces base.html obtendrá solo lachild_content bloque, no elcontent bloque.

Además, me gustaría poder hacer esto sin tener que crear un montón de subbloques (¿y si decido que elfooa aplicación @ debe tener su propia/foo/base.html que luego llama a/base.html)?

¿Algunas ideas

Respuestas a la pregunta(1)

Su respuesta a la pregunta