Deine erste Vorlage
Teil des Abschnitts Django-Grundlagen der Django-Journey von Coddy. Lektion 11 von 23.
Das HTML der Startseite ist für eine Python-Zeichenkette zu lang geworden. Django speichert HTML in einer Vorlage, einer Datei, die die View rendert. Die Warenkorb-View eines Shops:
from django.shortcuts import render
def cart(request):
return render(request, "shop/cart.html")render() liest die Vorlage, füllt sie aus und gibt eine HttpResponse zurück. Django sucht in settings.py im Ordner templates/ jeder App in INSTALLED_APPS nach "shop/cart.html". Daher müssen zwei Dinge stimmen:
- Die App ist in
INSTALLED_APPSeingetragen; - die Datei befindet sich unter
shop/templates/shop/cart.html. Das wiederholteshopsorgt dafür, dass sie von dercart.htmleiner anderen App getrennt bleibt.
Fehlt eines von beidem, stürzt die Seite mit TemplateDoesNotExist ab und listet alle Ordner auf, die Django durchsucht hat. Das {% url %}-Tag in home.html erstellt den Link zur Seite „Über uns“; eine spätere Lektion erklärt es.
Aufgabe
EinfachDer HTML-Code der Startseite ist in menu/templates/menu/home.html bereit. Lass die Ansicht home ihn rendern.
- Füge in
mysite/settings.py"menu"zuINSTALLED_APPShinzu. Django findet Vorlagen nur in den dort aufgeführten Apps. - Importiere in
menu/views.pyrenderausdjango.shortcutsund ersetze diereturn-Zeile der Ansichthome, sodass sie"menu/home.html"rendert.
Klicke auf Run: In der Titelleiste der Website steht Corner Café.
Probier es selbst
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.")
Alle Lektionen in Django-Grundlagen
1Deine erste Django-Website
Hallo, DjangoEine zweite Seite4Layouts und statische Dateien
Template-VererbungEin Titel für jede Seite3Vorlagen
Deine erste VorlageVariablen in VorlagenÜbe selbstständig: Django-Playground