2010-06-19 12 views
11

Me gustaría utilizar el módulo Mensajes de Django, sin embargo, me gustaría que mis mensajes persistan hasta que el usuario haga clic en una X al lado del mensaje en lugar de que desaparezcan tan pronto como el usuario vuelva a cargar la página.Cómo hacer que los mensajes django estilo StackOverflow?

estoy confundido con dos cuestiones: ¿Cómo hago contexto, los mensajes de los procesadores no borrar los mensajes una vez que se accede a ellos? ¿Cómo puedo eliminar el mensaje de la base de datos de forma explícita una vez que el usuario hace clic en el botón "eliminar" (que invoca una llamada ajax)?

Gracias!

Respuesta

8

En su caso django.contrib.messages no le traerá nada bueno. Es un sistema de mensajes inspirado en el sistema flash RoR, donde los mensajes no deberían permanecer alrededor de

Debería crear su propio sistema de mensajes (¿django-persistent-messages quizás?) Que guardará los mensajes para los usuarios registrados en la base de datos.

  • Es una tarea bastante trivial para implementar
  • un modelo con una clave externa de usuario
  • un procesador de contexto para que los mensajes disponibles en las plantillas
  • el fin de consumir un mensaje
  • tal vez una función auxiliar para crear los mensajes

No olvides ponerlo a disposición de los demás si lo haces =)

+5

Actualmente hay 5 aplicaciones que proporcionan algo de notificación de mensajes: http://code.djangoproject.com/wiki/SessionMessages –

+0

Gracias @Guillaume Esquevin, este parece ser el mejor enfoque para los mensajes vinculados a los usuarios en lugar de a las sesiones. –

+0

Una pregunta para principiantes: ¿por qué necesito una clase de middleware? Por lo que puedo decir, el context_processor hace todo el trabajo de enganche o ¿estoy equivocado? –

2

Los mensajes de Django pueden parecer un buen punto de partida, pero requieren contorsiones para llegar a donde quieres ir, y no confiaría en que el lanzamiento futuro de Django no rompa tus hackeos.

La implementación de su propio modelo de UserMessage probablemente le servirá mejor a largo plazo. Eso le proporciona un control completo e inequívoco del ciclo de vida del mensaje. También podría ser una buena aplicación reutilizable.

+0

Desde 1.2, Django tiene un nuevo marco de mensajes aparte de la antigua API.Es tan estable como cualquier otro componente contrib. –

7

Desde 1.2, Django tiene una nueva estructura de mensajes-- django.contrib.messages - que ahora está completamente separada del módulo auth y ofrece mucha más funcionalidad. Por ejemplo, proporciona una forma básica de manejar el expiration of messages.

También puede echar un vistazo a la aplicación django-cnotes que proporciona un sencillo sistema de notificación de usuario basado en cookies. Establecer constante CNOTES_AUTO_CLEAR a False evita borrar las notas automáticamente.

Y hay django-notices, otro reemplazo para el sistema de notificación de mensajes incorporado. No es mágico, pero proporciona una API elegante y simple.

+0

¿Hay algún reemplazo que esté vinculado al módulo de usuarios? Es decir, me gustaría que los mensajes siempre aparezcan para el usuario y no que estén vinculados a una sesión en particular. –

4

Desde finales de 2010, existe la biblioteca, django-persistent-messages, para exactamente este objetivo. Está razonablemente bien documentado y funciona bien para crear un sistema de mensajería estilo Stack Overflow.

También se integra con el sistema integrado de mensajería Django, por lo que los cambios de código son relativamente menores, y aún puede utilizar el sistema original para mensajes que no necesitan ser persistentes.

Cuestiones relacionadas