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.
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.ouThe 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})
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