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.
Défi
FacileIndique au visiteur que chaque enregistrement a réussi.
- Dans
events/views.py, ajoute un message de réussite après chaque enregistrement, avant la redirection : dansnew_event,Your event was added.; dansedit_event,Your changes were saved.; dansdelete_event,The event was deleted. - 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})
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
3Formulaires de modèle
Un formulaire de modèleModifier un événementSupprimer un événementMessages de réussiteEntraînez-vous par vous-même : Playground Django