Menu
CoddyTech

Mensajes de éxito

Parte de la sección Formularios del Journey de Django de Coddy. Lección 15 de 20.

Después de guardar, el visitante llega a la página del evento, pero nada indica que se haya guardado correctamente. La vista no puede pasar una variable a esa página: otra vista la genera en la siguiente solicitud.

El framework de mensajes de Django lleva una nota a través de la redirección. La vista la agrega antes de redirigir; Django la conserva para ese visitante y la entrega a la siguiente página que se genera. Un blog que guarda un comentario:

from django.contrib import messages

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

Todas las plantillas reciben una variable messages, así que una plantilla base puede mostrarlos en todas las páginas:

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

Recorrer messages los marca como leídos, así que cada uno se muestra una sola vez.

challenge icon

Desafío

Fácil

Indícale al visitante que cada guardado se realizó correctamente.

  1. En events/views.py, añade un mensaje de éxito después de cada guardado, antes de la redirección: en new_event Your event was added., en edit_event Your changes were saved., en delete_event The event was deleted.
  2. En base.html, encima de {% block content %}, muestra cada mensaje como un <li> dentro de <ul class="messages">, y muestra la lista solo cuando haya mensajes.

Añade un evento: Your event was added. aparece en la parte superior y desaparece al recargar la página.

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Formularios

Practica por tu cuenta: Playground de Django