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 non c’è alcuna indicazione che il salvataggio sia riuscito. La vista non può passare una variabile a quella pagina: a generarla è un’altra vista, nella richiesta successiva.
Il framework dei messaggi di Django porta una nota attraverso il reindirizzamento. La vista la aggiunge prima di reindirizzare; Django la conserva per quel visitatore e la 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
Facile- Dopo ogni salvataggio in
events/views.py, aggiungi un messaggio di conferma:Your event was added.,Your changes were saved.oppureThe event was deleted. - In
base.html, sopra{% block content %}, mostra i messaggi come elementi di un<ul class="messages">, solo quando ce ne sono.
Premi Run, aggiungi un evento, quindi ricarica la sua 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