Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Comunica al visitatore che ogni salvataggio è andato a buon fine.

  1. In events/views.py, aggiungi un messaggio di conferma dopo ogni salvataggio, prima del reindirizzamento: in new_event Your event was added., in edit_event Your changes were saved., in delete_event The event was deleted.
  2. 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})
quiz iconMettiti alla prova

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