Menu
CoddyTech

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 wiederholte shop sorgt dafür, dass sie nicht mit der cart.html einer 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.

challenge icon

Aufgabe

Einfach

Das 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

Übe selbstständig: Django-Playground