Horaires d’ouverture
Fait partie de la section Les bases de Django du Journey Django de Coddy. Leçon 22 sur 23.
Le café a de nouveaux horaires : il ouvre plus tard les vendredis et samedis et est fermé le dimanche. Ils se trouvent dans HOURS dans menu/views.py, avec un dictionnaire par jour, et opens vaut None le dimanche. La page /hours/ renvoie toujours une seule ligne de texte.
Un horaire se prête bien à un tableau HTML : une balise <tr> par ligne et une balise <td> par cellule.
<table>
<tr><td>Espresso</td><td>$2.50</td></tr>
<tr><td>Latte</td><td>$3.50</td></tr>
</table>None est considéré comme faux dans {% if %}, donc un jour où le café n'ouvre pas peut l'indiquer dans la partie {% else %}.Défi
MoyenFais en sorte que /hours/ affiche menu/hours.html (déjà créé pour toi) avec HOURS dans son contexte. Dans son tableau, une ligne <tr> par jour : le jour dans le premier <td>, puis 8:00 to 18:00, ou Closed lorsque l’établissement est fermé ce jour-là.
Appuie sur Run : l’aperçu s’ouvre sur /hours/.
Essayez vous-même
from django.http import Http404, HttpResponse
from django.shortcuts import render
DRINKS = {
"espresso": {
"slug": "espresso",
"name": "Espresso",
"price": 2.5,
"description": "A short, strong shot of coffee.",
"sold_out": False,
},
"latte": {
"slug": "latte",
"name": "Latte",
"price": 3.5,
"description": "Espresso with lots of steamed milk.",
"sold_out": False,
},
"flat-white": {
"slug": "flat-white",
"name": "Flat White",
"price": 3.75,
"description": "Espresso with a thin layer of silky milk.",
"sold_out": False,
},
"hot-chocolate": {
"slug": "hot-chocolate",
"name": "Hot Chocolate",
"price": 3,
"description": "Dark chocolate melted into warm milk.",
"sold_out": True,
},
}
MENU = {
"Coffee": [
{"name": "Espresso", "price": 2.5},
{"name": "Latte", "price": 3.5},
{"name": "Flat White", "price": 3.75},
],
"Tea": [
{"name": "Green Tea", "price": 2.5},
{"name": "Chai", "price": 3.25},
],
"Cakes": [
{"name": "Carrot Cake", "price": 4},
{"name": "Lemon Tart", "price": 3.5},
],
}
HOURS = [
{"day": "Monday", "opens": "8:00", "closes": "18:00"},
{"day": "Tuesday", "opens": "8:00", "closes": "18:00"},
{"day": "Wednesday", "opens": "8:00", "closes": "18:00"},
{"day": "Thursday", "opens": "8:00", "closes": "18:00"},
{"day": "Friday", "opens": "8:00", "closes": "20:00"},
{"day": "Saturday", "opens": "9:00", "closes": "20:00"},
{"day": "Sunday", "opens": None, "closes": None},
]
def home(request):
return render(request, "menu/home.html", {"special": DRINKS["flat-white"]})
def drink_list(request):
return render(request, "menu/drinks.html", {"drinks": DRINKS.values()})
def full_menu(request):
return render(request, "menu/menu.html", {"menu": MENU})
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
1Votre premier site Django
Bonjour, DjangoUne deuxième page4Mises en page et fichiers statiques
Héritage des templatesUn titre pour chaque pageEntraînez-vous par vous-même : Playground Django