Herencia de plantillas
Parte de la sección Conceptos básicos de Django del Journey de Django de Coddy. Lección 17 de 23.
home.html y drinks.html repiten el mismo <head>, y pronto también una barra de navegación. Si cambias el marco, tienes que editar todos los archivos. En cambio, una plantilla base sirve de marco para todas las páginas, y cada página completa su propia parte. Django llama al marco la plantilla padre y a cada página, una plantilla hija.
El marco marca la parte que completa una página con una etiqueta {% block %} y un nombre. Una plantilla de una biblioteca, library/base.html:
<body>
<nav>...</nav>
<article>{% block body %}{% endblock %}</article>
</body>Una página empieza con {% extends %} y después completa el bloque:
{% extends "library/base.html" %}
{% block body %}
<p>We are open until 20:00.</p>
{% endblock %}{% extends %} debe ser la primera etiqueta. En una página que extiende otra, se descarta todo lo que esté fuera de un bloque: un encabezado que olvides incluir en un bloque desaparecerá.
Desafío
IntermedioHaz que ambas páginas compartan el marco de base.html.
- En
base.html, coloca un bloque vacío llamadocontentdentro de<main>. - En
home.html, extiende"menu/base.html"en la primera línea. Conserva solo lo que estaba dentro de<body>y colócalo en el bloquecontent. - Haz lo mismo en
drinks.html.
Pulsa Run: ambas páginas muestran la navegación de base.html.
Pruébalo tú mismo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Corner Café</title>
</head>
<body>
<nav>
<a href="{% url 'menu:home' %}">Home</a>
<a href="{% url 'menu:drinks' %}">Drinks</a>
<a href="{% url 'menu:about' %}">About</a>
</nav>
<main>
<!-- each page's content goes here -->
</main>
</body>
</html>
Todas las lecciones de Conceptos básicos de Django
1Tu primer sitio con Django
Hola, DjangoUna segunda página4Diseños y archivos estáticos
Herencia de plantillasUn título para cada páginaPractica por tu cuenta: Playground de Django