Menu
CoddyTech

Il tuo primo template

Fa parte della sezione Fondamenti di Django del percorso Django di Coddy. Lezione 11 di 23.

Il codice HTML della pagina iniziale è diventato troppo lungo per una stringa Python. Django conserva il codice HTML in un template, un file elaborato dalla vista. Ecco la vista del carrello di un negozio:

from django.shortcuts import render


def cart(request):
    return render(request, "shop/cart.html")
render() legge il template, lo compila e restituisce un HttpResponse. Django cerca "shop/cart.html" nella cartella templates/ di ogni app presente in INSTALLED_APPS, in settings.py. Quindi due cose devono essere corrette:
  • l'app deve essere in INSTALLED_APPS;
  • il file deve trovarsi in shop/templates/shop/cart.html. La ripetizione di shop lo distingue dal file cart.html di un'altra app.

Se ne manca una, la pagina va in errore con TemplateDoesNotExist, che elenca tutte le cartelle in cui Django ha cercato. Il tag {% url %} in home.html crea il link alla pagina Informazioni; una lezione successiva lo spiegherà.

challenge icon

Sfida

Facile

L'HTML della pagina iniziale è pronto in menu/templates/menu/home.html. Fai in modo che la vista home lo renderizzi e assicurati che Django riesca a trovarlo.

Premi Run: la barra del titolo del sito mostra Corner Café. Se compare la pagina gialla TemplateDoesNotExist, leggi le cartelle in cui ha cercato.

Provalo tu

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.")

Tutte le lezioni di Fondamenti di Django

Esercitati da solo: Playground Django