Menu
CoddyTech

Erfolgsmeldungen

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

Nach dem Speichern landet der Besucher auf der Seite des Ereignisses, aber nichts zeigt an, dass das Speichern funktioniert hat. Die View kann keine Variable an diese Seite übergeben: Eine andere View rendert sie in der nächsten Anfrage.

Djangos Messages-Framework überträgt eine Nachricht über die Weiterleitung hinweg. Die View fügt sie vor der Weiterleitung hinzu; Django speichert sie für diesen Besucher und übergibt sie an die nächste gerenderte Seite. Ein Blog, das einen Kommentar speichert:

from django.contrib import messages

comment.save()
messages.success(request, "Thanks, your comment is posted.")
return redirect("blog:post", pk=post.pk)

Jede Vorlage erhält eine Variable messages, sodass eine Basisvorlage sie auf jeder Seite anzeigen kann:

{% for message in messages %}
<p class="note">{{ message }}</p>
{% endfor %}

Durch das Durchlaufen von messages werden die Nachrichten als gelesen markiert, sodass jede nur einmal angezeigt wird.

challenge icon

Aufgabe

Einfach
  • Füge nach jedem Speichern in events/views.py eine Erfolgsmeldung hinzu: Your event was added., Your changes were saved. oder The event was deleted.
  • Zeige in base.html oberhalb von {% block content %} die Meldungen als Listenelemente in einer <ul class="messages"> an, aber nur, wenn es welche gibt.

Klicke auf „Run“, füge ein Ereignis hinzu und lade anschließend dessen Seite neu.

Probier es selbst

from django.shortcuts import get_object_or_404, redirect, render

from .forms import EventForm
from .models import Event


def event_list(request):
    q = request.GET.get("q", "")
    events = Event.objects.all()
    if q:
        events = events.filter(title__icontains=q)
    return render(request, "events/event_list.html", {"events": events, "q": q})


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


def new_event(request):
    if request.method == "POST":
        form = EventForm(request.POST)
        if form.is_valid():
            event = form.save()
            return redirect("events:detail", pk=event.pk)
    else:
        form = EventForm()
    return render(request, "events/new_event.html", {"form": form})


def edit_event(request, pk):
    event = get_object_or_404(Event, pk=pk)
    if request.method == "POST":
        form = EventForm(request.POST, instance=event)
        if form.is_valid():
            form.save()
            return redirect("events:detail", pk=event.pk)
    else:
        form = EventForm(instance=event)
    return render(request, "events/edit_event.html", {"form": form, "event": event})


def delete_event(request, pk):
    event = get_object_or_404(Event, pk=pk)
    if request.method == "POST":
        event.delete()
        return redirect("events:list")
    return render(request, "events/delete_event.html", {"event": event})
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Formulare

Übe selbstständig: Django-Playground