Messaggi di successo
Fa parte della sezione Form del percorso Django di Coddy. Lezione 15 di 20.
Dopo il salvataggio, il visitatore arriva alla pagina dell’evento, ma nulla indica che il salvataggio sia andato a buon fine. La vista non può passare una variabile a quella pagina: la genera un’altra vista, nella richiesta successiva.
Il framework messages di Django trasporta un messaggio attraverso il reindirizzamento. La vista lo aggiunge prima di reindirizzare; Django lo conserva per quel visitatore e lo passa alla pagina generata successivamente. Un blog che salva un commento:
from django.contrib import messages
comment.save()
messages.success(request, "Thanks, your comment is posted.")
return redirect("blog:post", pk=post.pk)Ogni template riceve una variabile messages, quindi un template di base può mostrarli in ogni pagina:
{% for message in messages %}
<p class="note">{{ message }}</p>
{% endfor %}Iterare su messages li contrassegna come letti, quindi ognuno viene mostrato una sola volta.
Sfida
FacileComunica al visitatore che ogni salvataggio è andato a buon fine.
- In
events/views.py, aggiungi un messaggio di conferma dopo ogni salvataggio, prima del reindirizzamento: innew_eventYour event was added., inedit_eventYour changes were saved., indelete_eventThe event was deleted. - In
base.html, sopra{% block content %}, mostra ogni messaggio come<li>all'interno di<ul class="messages">e visualizza l'elenco solo quando ci sono messaggi.
Aggiungi un evento: Your event was added. viene mostrato in alto e scompare al ricaricamento della pagina.
Provalo tu
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})
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Form
Esercitati da solo: Playground Django