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 de variable à cette page : une autre vue la génère lors de la requête suivante.

Le framework de messages de Django transporte une note à travers la redirection. La vue l’ajoute avant de rediriger ; Django la conserve pour ce visiteur et la transmet à la page suivante générée. 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, de sorte que chacun s’affiche une seule fois.

challenge icon

Défi

Facile

Indique au visiteur que chaque enregistrement a réussi.

  1. Dans events/views.py, ajoute un message de réussite après chaque enregistrement, avant la redirection : dans new_event, Your event was added. ; dans edit_event, Your changes were saved. ; dans delete_event, The event was deleted.
  2. Dans base.html, au-dessus de {% block content %}, affiche chaque message sous forme de <li> dans <ul class="messages">, et n’affiche la liste que s’il y a des messages.

Ajoute un événement : Your event was added. s’affiche en haut, et un rechargement de la page l’efface.

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