2009-12-03 25 views
13

La mia app Django visualizza i dati da un database. Questi dati cambiano senza l'intervento dell'utente, cioè dietro le quinte. Ogni volta che cambia, vorrei che la pagina web aggiorni le sezioni modificate senza ricaricare una pagina intera.come aggiornare una pagina Django senza ricaricare una pagina?

Ovviamente AJAX mi viene in mente. Quando la pagina viene caricata inizialmente (o manualmente, completamente ricaricata in seguito), il modello renderizzato carica un JavaScript che esegue window.onload = update ("tutto"), update (...) a sua volta attiva un numero di XMLHTTPRequests che restituisce di nuovo i dati che vengono trasformati in parti HTML per le sezioni corrispondenti. Tutto funziona bene. Al caricamento iniziale della pagina.

Ora mi trovo in una funzione Python che salva un nuovo oggetto nel database.

Come si comunica al browser di eseguire l'aggiornamento (...)?

Devo in qualche modo emettere manualmente una richiesta a un url mappato a una vista che a sua volta esegue il rendering di un modello che contiene il codice JavaScript per eseguire l'aggiornamento (...) ??? Oh mio!

Mi sembra di non seguire i soliti approcci. Forse sono solo in piedi per chiudere di fronte al problema.

Qualcuno può aiutarmi?

risposta

6

due approcci:

  1. solo aggiornare il database e attendere fino alla prossima interrogazione AJAX. ciò significa che dovrebbe eseguire periodicamente la query, dovrai bilanciare tra l'immediatezza e il carico del server. aiuta un po 'se riesci a fare una query economica per verificare se c'è stato un aggiornamento. forse fai in modo che il controllo si basi solo su memcached invece di andare al DB

    • utilizzare comet. In breve: il client esegue una query AJAX per chiedere l'aggiornamento. il server vede che non c'è alcun aggiornamento, quindi non risponde. invece, la connessione viene mantenuta aperta per un lungo periodo di tempo. alla fine arriva l'aggiornamento e il server risponde alla fine, oppure il client va in timeout e interrompe la connessione. in tal caso, il cliente deve immediatamente riemettere la query per continuare ad attendere l'aggiornamento.
+0

Grazie a tutti e due per il vostro aiuto! :-) Guarderò in cometa e vedrò se riesco a farlo funzionare, altrimenti dovrò effettuare periodicamente il polling per un aggiornamento. – ssc

+0

Entrambe le risposte erano davvero buone, impostando una arbitraria come risposta accettata. Grazie ancora! :-) – ssc

7

si hanno due scelte

  1. Avere il sondaggio browser usando setTimeout()
  2. sguardo nel Comet - questa è una tecnica per la spinta di dati dal server al browser.

Ecco un articolo su Comet in Django

Problemi correlati