2010-08-10 32 views
7

Perdóname si esta pregunta tiene poco sentido; He dormido poco últimamente.Enviando mensajes al usuario a través de señales de django

Deseo enviar una notificación al usuario cada vez que se dispare una señal a través del módulo de mensajes de django, pero no entiendo cómo pasar el objeto de solicitud al método messages.success.

Lo hago porque cada vez que un usuario recibe una insignia, tengo que contarle al respecto. Por ejemplo, cuando un usuario completa su perfil, se le otorga un número determinado de calificaciones o se le otorga una determinada cantidad de comentarios. En este momento, la única forma de que el usuario diga que tiene una insignia nueva es ir a la página de la insignia, pero quiero informarle gentilmente al usuario sobre el evento.

El uso de las notificaciones de django funcionaría, pero el sistema que tenemos instalado sería demasiado discordante (actualmente carga un modal) y es más caro ya que llega a la base de datos.

Gracias de antemano.

+1

Probablemente no desee hacer esto. Por favor explica por qué estás intentando algo como esto. Solo mostrar el mensaje en su plantilla es la solución habitual. ¿Que estás tratando de hacer? –

+0

"cuando un usuario recibe una insignia"? ¿Qué? –

Respuesta

7

La estructura de mensajes de Django opera contra las solicitudes de HTTP en lugar de los usuarios (por lo que también funciona para usuarios anónimos). Una señal no tendría idea de a qué solicitud adjuntar un mensaje, y es posible que el usuario en cuestión probablemente ni siquiera haya iniciado sesión en ese momento.

Parece que lo que estás tratando de hacer sería más adecuado para algo como django-notification, http://github.com/jtauber/django-notification/.

+0

Gracias, esto es exactamente lo que estoy buscando. – IntrepidDude

+0

Ugh ... tras una reconsideración, la ruta de notificación de django parece menos tentadora. Minimizar las consultas a la base de datos es una prioridad. – IntrepidDude

+0

Jaja, solo me tomó cuatro años darme cuenta de que esto cumple con todos los requisitos especificados en mi pregunta. – IntrepidDude

2

No se puede usar el marco de mensajes directamente en una señal porque no tiene acceso a una solicitud.

Probablemente pueda evitar esto al envolver una vista que es probable que el usuario vaya con frecuencia con algo que busca nuevas insignias y crea un mensaje. Entonces, aunque no recibirían el mensaje en la siguiente página vista después de recibir la insignia, la obtendrían en la primera página vista después de la página que crea el mensaje.

Cuestiones relacionadas