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 deshopevita que se confunda con elcart.htmlde 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.
Desafío
FácilEl 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
1Tu primer sitio con Django
Hola, DjangoUna segunda página4Diseños y archivos estáticos
Herencia de plantillasUn título para cada página3Plantillas
Tu primera plantillaVariables de plantillaPractica por tu cuenta: Playground de Django