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 einem Template, 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 das Template, füllt es 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_APPS; - die Datei befindet sich unter
shop/templates/shop/cart.html. Das wiederholteshopsorgt dafür, dass sie nicht mit dercart.htmleiner anderen App verwechselt wird.
Fehlt eines von beiden, stürzt die Seite mit TemplateDoesNotExist ab und listet alle Ordner auf, die Django durchsucht hat. Das Tag {% url %} in home.html erstellt den About-Link; eine spätere Lektion erklärt es.
Aufgabe
EinfachDas HTML der Startseite ist unter menu/templates/menu/home.html bereit. Lass die home-Ansicht es rendern und stelle sicher, dass Django es finden kann.
Klicke auf Run: In der Titelleiste der Website steht Corner Café. Wenn die gelbe Seite TemplateDoesNotExist angezeigt wird, lies nach, in welchen Ordnern gesucht wurde.
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