Menu
CoddyTech

Votre premier modèle

Fait partie de la section Les bases de Django du Journey Django de Coddy. Leçon 11 sur 23.

Le HTML de la page d’accueil est devenu trop long pour une chaîne Python. Django conserve le HTML dans un gabarit, un fichier rendu par la vue. Voici la vue du panier d’une boutique :

from django.shortcuts import render


def cart(request):
    return render(request, "shop/cart.html")
render() lit le gabarit, le remplit et renvoie une HttpResponse. Django recherche "shop/cart.html" dans le dossier templates/ de chaque application figurant dans INSTALLED_APPS, dans settings.py. Deux choses doivent donc être correctes :
  • l’application figure dans INSTALLED_APPS ;
  • le fichier se trouve à l’emplacement shop/templates/shop/cart.html. La répétition de shop permet de le distinguer du fichier cart.html d’une autre application.

Si l’un de ces éléments manque, la page plante et affiche TemplateDoesNotExist, ainsi que la liste de tous les dossiers parcourus par Django. La balise {% url %} dans home.html crée le lien « À propos » ; une leçon ultérieure l’expliquera.

challenge icon

Défi

Facile

Le code HTML de la page d’accueil est prêt dans menu/templates/menu/home.html. Fais en sorte que la vue home le rende et vérifie que Django peut le trouver.

Clique sur Run : la barre de titre du site affiche Corner Café. Si la page jaune TemplateDoesNotExist s’affiche, lis les dossiers qu’elle a parcourus.

Essayez vous-même

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

Toutes les leçons de Les bases de Django

Entraînez-vous par vous-même : Playground Django