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 elfoo
a aplicación @ debe tener su propia/foo/base.html
que luego llama a/base.html
)?
¿Algunas ideas