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 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.

challenge icon

Sfida

Facile
  • Dopo ogni salvataggio in events/views.py, aggiungi un messaggio di conferma: Your event was added., Your changes were saved. oppure The 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})
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