Menu
CoddyTech

Messages de réussite

Fait partie de la section Formulaires du Journey Django de Coddy. Leçon 15 sur 20.

Après l’enregistrement, le visiteur arrive sur la page de l’événement, mais rien n’indique que l’enregistrement a fonctionné. La vue ne peut pas transmettre une variable à cette page : une autre vue la génère lors de la requête suivante.

Le framework messages de Django transmet un message lors de la redirection. La vue l’ajoute avant de rediriger ; Django le conserve pour ce visiteur et le transmet à la page générée ensuite. Voici un blog qui enregistre un commentaire :

from django.contrib import messages

comment.save()
messages.success(request, "Thanks, your comment is posted.")
return redirect("blog:post", pk=post.pk)

Chaque modèle reçoit une variable messages, de sorte qu’un modèle de base peut les afficher sur chaque page :

{% for message in messages %}
<p class="note">{{ message }}</p>
{% endfor %}

Parcourir messages les marque comme lus, donc chacun s’affiche une seule fois.

challenge icon

Défi

Facile
  • Après chaque enregistrement dans events/views.py, ajoute un message de réussite : Your event was added., Your changes were saved. ou The event was deleted.
  • Dans base.html, au-dessus de {% block content %}, affiche les messages sous forme d’éléments d’une <ul class="messages">, uniquement s’il y en a.

Clique sur Exécuter, ajoute un événement, puis recharge sa page.

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Formulaires

Entraînez-vous par vous-même : Playground Django