2009-12-03 155 views
13

Mi aplicación Django muestra datos de una base de datos. Estos datos cambian sin la intervención del usuario, es decir, entre bastidores. Siempre que cambie, me gustaría que la página web actualice las secciones modificadas sin una recarga de página completa.cómo actualizar una página de Django sin una recarga de página?

Obviamente, me viene a la mente AJAX. Cuando la página se carga inicialmente (o manualmente, se vuelve a cargar por completo más adelante), la plantilla procesada carga un JavaScript que ejecuta window.onload = update ("all"), update (...) a su vez activa un número de XMLHTTPRequests que nuevamente devuelve datos que se transforman en piezas HTML para las secciones correspondientes. Todo funciona bien En la carga de la página inicial.

Ahora me encuentro en una función de Python que guarda un nuevo objeto en la base de datos.

¿Cómo le digo al navegador que ejecute la actualización (...)?

¿Debo de alguna forma enviar una solicitud manualmente a una url mapeada a una vista que a su vez representa una plantilla que contiene el código JavaScript para ejecutar la actualización (...) ??? ¡Oh mi!

Siento que no estoy siguiendo los enfoques habituales. Tal vez estoy de pie para cerrar frente al problema.

¿Alguien me puede ayudar?

Respuesta

6

dos enfoques:

  1. acaba de actualizar la base de datos y esperar hasta la próxima consulta AJAX. eso significa que debe hacer la consulta periódicamente, deberá equilibrar entre la inmediatez y la carga del servidor. ayuda un poco si puede hacer una consulta económica para verificar si ha habido una actualización. Tal vez hacer el registro de entrada se basan sólo en memcached en vez de ir a la utilización DB

    • comet. En resumen: el cliente hace una consulta AJAX pidiendo la actualización. el servidor ve que no hay actualizaciones, por lo que no responde. en cambio, la conexión se mantiene abierta durante mucho tiempo. eventualmente llega la actualización y el servidor finalmente responde, o el cliente agota el tiempo de espera y cancela la conexión. en ese caso, el cliente debe volver a emitir inmediatamente la consulta para seguir esperando la actualización.
+0

¡Gracias a los dos por su ayuda! :-) Buscaré en el cometa y veré si puedo hacer que funcione, de lo contrario tendré que sondear periódicamente para obtener una actualización. – ssc

+0

Ambas respuestas fueron realmente buenas, simplemente estableciendo una arbitraria como la respuesta aceptada. ¡Gracias de nuevo! :-) – ssc

7

tiene dos opciones

  1. Tener la encuesta navegador usando setTimeout()
  2. mirada hacia el cometa - Esta es una técnica para empujar los datos desde el servidor al navegador.

He aquí un artículo sobre Comet in Django

Cuestiones relacionadas