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.
Aufgabe
EinfachTeile dem Besucher mit, dass jedes Speichern erfolgreich war.
- Füge in
events/views.pynach jedem Speichern und vor der Weiterleitung eine Erfolgsmeldung hinzu: innew_eventYour event was added., inedit_eventYour changes were saved., indelete_eventThe event was deleted. - Zeige in
base.htmloberhalb 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})
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