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 bei der nächsten Anfrage.

Djangos Messages-Framework überträgt eine Mitteilung über die Weiterleitung hinweg. Die View fügt sie vor der Weiterleitung hinzu; Django bewahrt sie für diesen Besucher auf und übergibt sie an die nächste gerenderte Seite. Ein Blog, der 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 messages-Variable, sodass eine Basisvorlage sie auf jeder Seite anzeigen kann:

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

Durchlaufen von messages markiert die Mitteilungen als gelesen, sodass jede nur einmal angezeigt wird.

challenge icon

Aufgabe

Einfach

Teile dem Besucher mit, dass jedes Speichern erfolgreich war.

  1. Füge in events/views.py nach jedem Speichern und vor der Weiterleitung eine Erfolgsmeldung hinzu: in new_event Your event was added., in edit_event Your changes were saved., in delete_event The event was deleted.
  2. Zeige in base.html oberhalb von {% block content %} jede Meldung als <li> innerhalb von <ul class="messages"> an und gib die Liste nur aus, wenn Meldungen vorhanden sind.

Ein Ereignis hinzufügen: Your event was added. wird oben angezeigt, und beim Neuladen verschwindet es.

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