Menu
CoddyTech

Il tuo primo template

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

L'HTML della pagina iniziale è diventato troppo lungo per una stringa Python. Django conserva l'HTML in un template, un file che la vista elabora. 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 in INSTALLED_APPS, in settings.py. Quindi, due cose devono essere corrette:

  • l'app è in INSTALLED_APPS;
  • il file si trova in shop/templates/shop/cart.html. La ripetizione di shop lo distingue da cart.html di un'altra app.

Se ne manca una, la pagina va in errore con TemplateDoesNotExist, elencando tutte le cartelle in cui Django ha cercato. Il tag {% url %} in home.html crea il link About; una lezione successiva lo spiega.

challenge icon

Sfida

Facile

Il codice HTML della pagina iniziale è pronto in menu/templates/menu/home.html. Fai in modo che la vista home lo visualizzi.

  1. In mysite/settings.py, aggiungi "menu" a INSTALLED_APPS. Django trova i template solo nelle app elencate lì.
  2. In menu/views.py, importa render da django.shortcuts e sostituisci la riga return della vista home in modo che visualizzi "menu/home.html".

Premi Esegui: la barra del titolo del sito mostra Corner Café.

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