Menu
CoddyTech

Query-Strings

Teil des Abschnitts Django-Grundlagen der Django-Journey von Coddy. Lektion 8 von 23.

Auf der Bestellseite steht immer „mittel“. Die Größe, die ein Kunde auswählt, kann nach einem Fragezeichen in der Adresse stehen: /order/?size=large.

Dieser Teil ist der Abfrage-String: Paare aus name=value, die durch & verbunden sind. Er ist nicht Teil der Route, daher passt path("search/", ...) auch auf /search/?q=cake. Die Ansicht liest die Paare aus request.GET, das wie ein Wörterbuch funktioniert:

def search(request):
    word = request.GET.get("q", "")
    if len(word) > 30:
        word = word[:30]
    return HttpResponse(f"Results for {word}")

.get() nimmt einen Standardwert für einen fehlenden Namen entgegen; request.GET["q"] würde stattdessen einen Fehler verursachen. Jeder Wert kommt als Text an, und jeder kann nach dem ? irgendetwas eingeben. Prüfe daher einen Wert, bevor du ihn verwendest. Um nur bestimmte Werte zu akzeptieren, vergleiche den Wert mit einer Liste zulässiger Werte und verwende für alle anderen einen Standardwert.

challenge icon

Aufgabe

Einfach

Sorge dafür, dass die Bestellseite die Größe aus der Adresse liest.

  1. Lies in der order-Ansicht size aus request.GET, damit ein fehlender Größenwert keinen Fehler verursacht.
  2. Gib für ?size=large You ordered a large coffee. zurück. Füge die Größe in den Satz ein, damit auch small und medium funktionieren.
  3. Bei jeder anderen Größe oder wenn keine Größe angegeben ist, wird eine mittlere Größe bestellt.

Öffne /order/?size=huge: Du siehst You ordered a medium coffee.

Probier es selbst

from django.http import HttpResponse

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):
    return HttpResponse("<h1>Welcome to Corner Café</h1><p>Fresh coffee and cake every day.</p>")


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):
    item = DRINKS[slug]
    return HttpResponse(f"<h1>{item['name']}</h1><p>{item['description']}</p>")


def order(request):
    size = "medium"
    return HttpResponse(f"You ordered a {size} coffee.")

Alle Lektionen in Django-Grundlagen

Übe selbstständig: Django-Playground