usar tutorial template examples bootstrap django templates

tutorial - templates django python



django incluye plantilla de otra aplicaciĆ³n (2)

Si bien puede hacerlo utilizando la etiqueta de inclusión y especificando rutas absolutas, la forma correcta de trabajar en Django es mediante el uso de la herencia de la plantilla .

Al configurar mi proyecto y trabajar para mantener las aplicaciones no dependientes, me he encontrado con un problema. Me gustaría que todas las plantillas de las diferentes aplicaciones tengan un encabezado y un pie de página consistentes. Esto es lo que estoy intentando:

myproject/ base/ templates/ header.html footer.html app1/ templates/ my_app1_page.html -> want to include ''header.html'' and ''footer.html'' from base app

Imagina que hay muchas más aplicaciones que también quieren hacer esto. ¿Es esto posible y / o la forma correcta de hacerlo?


Siempre que las aplicaciones estén en INSTALLED_APPS y el cargador de plantillas para directorios de aplicaciones esté habilitado, puede incluir cualquier plantilla de otra aplicación, es decir:

{% include "header.html" %}

... ya que sus plantillas se encuentran directamente en el directorio de plantillas de su aplicación. En general, para evitar conflictos de nombres, es mejor usar:

app1/ templates/ app1/ page1.html page2.html app2/ templates/ app2/ page1.html page2.html

Y {% include "app1/page1.html" %} o {% include "app2/page1.html" %} ...

Pero : para mantener una apariencia y sensación consistentes, es mucho mejor usar la herencia de la plantilla en lugar de la inclusión. La herencia de la plantilla es una de las cosas realmente buenas del sistema de plantillas de Django, elija herencia sobre inclusión siempre que tenga sentido (la mayoría de las veces).

Mis recomendaciones:

  • Tenga una plantilla base para su proyecto ("base.html" es la convención predeterminada) con encabezado y pie de página y un {%block content%} para su contenido principal.
  • Haga que sus otras plantillas hereden el formulario base.html {% extends "base.html" %} y anule la sección de contenido

Vea otra respuesta a esta pregunta para enlaces al documento