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 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_APPS eingetragen;
  • die Datei befindet sich unter shop/templates/shop/cart.html. Das wiederholte shop sorgt dafür, dass sie von der cart.html einer 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.

challenge icon

Aufgabe

Einfach

Der HTML-Code der Startseite ist in menu/templates/menu/home.html bereit. Lass die Ansicht home ihn rendern.

  1. Füge in mysite/settings.py "menu" zu INSTALLED_APPS hinzu. Django findet Vorlagen nur in den dort aufgeführten Apps.
  2. Importiere in menu/views.py render aus django.shortcuts und ersetze die return-Zeile der Ansicht home, 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

Übe selbstständig: Django-Playground