Saltar al contenido

¿Cómo pasar un mensaje de HttpResponseRedirect en Django?

Solución:

Añadiendo una respuesta más elaborada.

1: Configure un almacenamiento de mensajes en su settings.py:

MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'

o si no está usando sesiones, use CookieStorage:

MESSAGE_STORAGE = 'django.contrib.messages.storage.session.CookieStorage'

2: En su opinión, importe django.contrib.messages:

from django.contrib import messages

3: establezca los datos del mensaje antes de devolver HttpResonse:

messages.success(request, 'Changes successfully saved.')

que es una abreviatura de:

messages.add_message(request, messages.SUCCESS, 'Changes successfully saved.')

Las etiquetas de mensaje (mensajes ÉXITO en este caso) se puede usar en su plantilla para, por ejemplo, agregar una clase CSS correspondiente u ocultar mensajes de depuración. Django incluye algunas de forma predeterminada, pero si desea usar esto con las clases de alerta predeterminadas de Bootstrap, deberá agregar algunas etiquetas de mensaje personalizadas para las que faltan.

4: En su plantilla, puede usar mensajes como este si está usando alertas de Bootstrap:

{% if messages %}
    {% for message in messages %}
        <div class="alert {% if message.tags %}alert-{{ message.tags }}{% endif %}" role="alert">{{ message }}</div>
    {% endfor %}
{% endif %}

Por ejemplo, Django usa ‘error’ como etiqueta predeterminada para ERROR, mientras que Bootstrap usa peligro para indicar errores. La mejor solución es usar etiquetas personalizadas, pero también puedes parchearlo en tu plantilla (solución fea):

{% if messages %}
    {% for message in messages %}
            <div class="alert {% if message.tags %}alert-{% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}danger{% else %}{{ message.tags }}{% endif %}{% endif %}" role="alert">{{ message }}</div>
    {% endfor %}
{% endif %}

Utilice el marco de trabajo de mensajes para enviar mensajes entre solicitudes de página.

Tenga cuidado al usar i18n urls! Si usa un enlace como /whatever/ pero use la internacionalización, se redirigirá a /en/whatever/, perdiendo así el mensaje en la solicitud. Si utiliza la internacionalización, pase siempre el idioma a la URL:

from django.contrib import messages
from django.utils.translation import get_language

messages.success(request, _('Thank you'))
return redirect('/%s/whatever/' % get_language())

Me costó un par de horas entender esto …

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *