Menu
CoddyTech

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, editas todos los archivos. En su lugar, una plantilla proporciona el marco y las páginas lo rellenan.

El marco marca la parte que rellena una página con una etiqueta {% block %} y un nombre. El archivo library/base.html de una biblioteca:

<body>
    <nav>...</nav>
    <article>{% block body %}{% endblock %}</article>
</body>

Una página empieza con {% extends %} y después rellena 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: si olvidas incluir un encabezado en un bloque, desaparece.
challenge icon

Desafío

Intermedio
  • En base.html, coloca un bloque vacío llamado content dentro de <main>.
  • Haz que home.html y drinks.html extiendan "menu/base.html", con su propio HTML dentro de ese bloque.

Pulsa Run: ambas páginas muestran la barra de 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

Practica por tu cuenta: Playground de Django