Menu
CoddyTech

Tu primera plantilla

Parte de la sección Conceptos básicos de Django del Journey de Django de Coddy. Lección 11 de 23.

El HTML de la página de inicio ha crecido demasiado para una cadena de Python. Django guarda el HTML en una plantilla, un archivo que la vista renderiza. Vista del carrito de una tienda:

from django.shortcuts import render


def cart(request):
    return render(request, "shop/cart.html")
render() lee la plantilla, la rellena y devuelve un HttpResponse. Django busca "shop/cart.html" en la carpeta templates/ de cada aplicación de INSTALLED_APPS, en settings.py. Por tanto, dos cosas deben estar bien:
  • la aplicación está en INSTALLED_APPS;
  • el archivo está en shop/templates/shop/cart.html. La repetición de shop evita que se confunda con el cart.html de otra aplicación.

Si falta cualquiera de las dos, la página falla con TemplateDoesNotExist y muestra todas las carpetas en las que Django buscó. La etiqueta {% url %} de home.html crea el enlace «Acerca de»; una lección posterior la explica.

challenge icon

Desafío

Fácil

El HTML de la página de inicio está listo en menu/templates/menu/home.html. Haz que la vista home lo renderice y asegúrate de que Django pueda encontrarlo.

Pulsa Run: la barra de título del sitio dice Corner Café. Si aparece la página amarilla TemplateDoesNotExist, revisa las carpetas que buscó.

Pruébalo tú mismo

from django.http import Http404, HttpResponse
from django.urls import reverse

DRINKS = {
    "espresso": {"name": "Espresso", "price": 2.5, "description": "A short, strong shot of coffee."},
    "latte": {"name": "Latte", "price": 3.5, "description": "Espresso with lots of steamed milk."},
    "flat-white": {"name": "Flat White", "price": 3.75, "description": "Espresso with a thin layer of silky milk."},
    "hot-chocolate": {"name": "Hot Chocolate", "price": 3, "description": "Dark chocolate melted into warm milk."},
}


def home(request):
    about_url = reverse("menu:about")
    return HttpResponse(
        "<h1>Welcome to Corner Café</h1><p>Fresh coffee and cake every day.</p>"
        f'<a href="{about_url}">About us</a>'
    )


def about(request):
    return HttpResponse("Corner Café opened in 2026.")


def hours(request):
    return HttpResponse("Open every day from 8:00 to 18:00.")


def contact(request):
    return HttpResponse("Write to us at hello@cornercafe.example.")


def table(request, number):
    return HttpResponse(f"<h1>Table {number}</h1>")


def drink(request, slug):
    if slug not in DRINKS:
        raise Http404(f"No drink called {slug}")
    item = DRINKS[slug]
    return HttpResponse(f"<h1>{item['name']}</h1><p>{item['description']}</p>")


def order(request):
    size = request.GET.get("size", "medium")
    if size not in ["small", "medium", "large"]:
        size = "medium"
    return HttpResponse(f"You ordered a {size} coffee.")

Todas las lecciones de Conceptos básicos de Django

Practica por tu cuenta: Playground de Django