Sí, es importante. En primer lugar, extends
solo puede aparecer como la primera línea del archivo. En segundo lugar, include
empuja y aparece un objeto de contexto en la pila de resolución, lo que significa que el valor creado en el contexto mientras está en la inclusión saldrá del alcance cuando regrese.
Mi regla es: crear base.html
archivos de plantilla que definen la estructura general de su sitio y usar cantidades liberales de {% block foo %}
alrededor de áreas críticas. Luego, todas sus otras plantillas extends
la base (o algo que amplíe la base) y reemplaza esos bloques según sea necesario.
include
, por otro lado, es bueno para encapsular cosas que puede necesitar usar en más de un lugar, tal vez incluso en la misma página.
Actualización:
He estado usando mi propia biblioteca de template_tags
durante tanto tiempo que olvidar que el lenguaje de plantillas de Django tiene todavía grandes lagunas en la funcionalidad. La etiqueta en cuestión aquí es de un fragmento de django anterior llamado expr
que he editado y extendido en gran medida. Puede decir, por ejemplo, {% expr 'Fred' as name %}
(o cualquier expresión de Python válida), y almacenará el resultado en el espacio "nombre" en el Contexto actual. Si esto ocurre en una plantilla included
, el valor de name
aparecerá al salir del archivo de la plantilla.
Puede lograrlo con la etiqueta {% with %}
, pero expr
me da mucha mayor flexibilidad, incluso haciendo llamadas arbitrariamente complejas. Esto surgió originalmente al tener que crear objetos complejos en caché que requerían costosas interacciones DBMS que no se podían completar en la vista, debían invocarse en la plantilla misma.
Envíame un correo electrónico (en mi perfil) si necesitas profundizar en esto.
¿Podrías explicar esto con un ejemplo: 'el valor creado en el contexto mientras está en la inclusión saldrá del alcance cuando regrese' – Medorator