Menu
CoddyTech

Ein Suchformular

Teil des Abschnitts Formulare der Django-Journey von Coddy. Lektion 1 von 20.

Besucher können das Veranstaltungsbrett noch nicht durchsuchen. Ein Formular ist eine Sammlung von Feldern und einer Schaltfläche, die das, was eingegeben wurde, an eine URL sendet.

Ein Formular, das nur Daten liest, verwendet method="get": Der Browser fügt jedes Feld als name=value in die Abfragezeichenfolge der URL ein. Ein Größenfilter auf der Seite eines Shops:

<form method="get">
    <select name="size">
        <option value="S">Small</option>
        <option value="L">Large</option>
    </select>
    <button type="submit">Show</button>
</form>

Wenn du „Large“ auswählst, wird /products/?size=L geöffnet. Das name-Attribut des Feldes ist der Schlüssel, deshalb liest die Ansicht es wie jede Abfragezeichenfolge aus: request.GET.get("size", ""), mit einem Standardwert für die normale Seite.

Nach einer Suche wird die Seite neu geladen, und das Eingabefeld ist wieder leer. Damit die Wörter darin erhalten bleiben, gib sie an das Template zurück und schreibe sie in das value-Attribut des Eingabefeldes.

challenge icon

Aufgabe

Einfach

Füge der Startseite eine Suche hinzu.

  1. Füge in event_list.html oberhalb von <ul class="events"> ein Formular mit method="get" ein, das ein Eingabefeld namens q und eine Schaltfläche Search enthält.
  2. Behalte in event_list die Veranstaltungen, deren Titel q enthält, wobei Groß- und Kleinschreibung ignoriert wird.
  3. Übergib q an das Template für den value des Eingabefelds, damit eine Suche nach Meetup im Feld stehen bleibt.

Suche nach Jazz: Nur Friday Jazz Night bleibt übrig, und im Feld steht weiterhin jazz.

Probier es selbst

from django.shortcuts import get_object_or_404, render

from .models import Event


def event_list(request):
    events = Event.objects.all()
    return render(request, "events/event_list.html", {"events": events})


def event_detail(request, pk):
    event = get_object_or_404(Event, pk=pk)
    return render(request, "events/event_detail.html", {"event": event})

Alle Lektionen in Formulare

Übe selbstständig: Django-Playground