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.
Aufgabe
Einfach- Füge nach jedem Speichern in
events/views.pyeine Erfolgsmeldung hinzu:Your event was added.,Your changes were saved.oderThe event was deleted. - Zeige in
base.htmloberhalb 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})
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