Domanda

Ho una visione Django, e questo punto di vista restituisce una tabella che è popolata in modo asincrono con una chiamata AJAX.

Dal punto di vista del design, quale devo seguire:

  1. vista Django, chiamato tramite ajax, restituisce il contenuto della tabella come risposta JSON, contenente marcature html per ogni cella. Il gestore di callback JavaScript prende i contenuti e li schiaffeggia intatta nelle celle della tabella.
  2. la vista Django, chiamato tramite la tecnologia AJAX, restituisce i dati puri su ciò che dovrebbe andare in tavola, ancora una volta come una risposta JSON. L'asincrona javascript callback prende i dati, li formatta con una corretta marcatura, e lo mette nella tabella.

In altre parole, chi dovrebbe avere la responsabilità per la formattazione marcatura del contenuto della cella? la vista o il javascript?

sarei tentato di dire la prima, dal momento che la vista già restituisce il markup dei contenuti. Se restituisce un JSON con contenuti marcata-up, non c'è molta differenza.

Mi piacerebbe sentire il vostro punto di vista.

Nessuna soluzione corretta

Altri suggerimenti

Se si sta popolando l'intera tabella, si può mettere il vostro tavolo in un proprio modello e restituire HTML della tabella tramite la tecnologia AJAX / JSON.

È necessario modificare il modello originale per includere il modello di tabella:

 {% include "myapp/_table.html" %}

E nella vista, restituire il modello reso come una variabile JSON, che il vostro javascript sostituirà in:

 return { 'table': render_to_string("myapp/_table.html", context) }

Questo approccio è un bene dove si vuole sempre di aggiornare l'intera tabella, e la resa del tavolo non richiede il contesto completo. Non sono sicuro di quello che le prestazioni sono simili, ma è un modo pulito di aggiornare parte della pagina, perché si definisce solo il vostro tavolo una volta.

Dipende (come spesso accade).

Se i dati vengono richiesti solo qui e ora, sarebbe più facile e meno soggetto a errori di appena lasciate il rendering sul lato server con lo stesso insieme di modelli che già rendeva la visualizzazione standard.

Se si potesse pensare a casi di utilizzo tuttavia, in cui sarebbero necessari i dati in altri luoghi (come i campi di completamento automatico), che sarebbe stato meglio lasciare che JavaScript fare il lavoro e creare un, riutilizzabile esportazione JSON pulita.

Queste opzioni aggiungere a tutte le altre risposte, e, infine, sta a voi decidere.

In un href="http://en.wikipedia.org/wiki/Model-view-presenter" rel="nofollow noreferrer"> MVP sistema

E 'una buona pratica javascript Unabstrusive, chiamato anche da alcune persone come Hijax

Quindi, per prima cosa avere una pagina standard, che presenta la tavola insieme al resto della pagina, con tavolo in un particolare blocco django-modello.

Una volta fatto questo, è possibile includere il estende parte del modello Django all'interno di un "se non Ajax", in modo da ottenere solo la parte tabella richiesta nella risposta Ajax, che è possibile caricare nel client al div richiesta.

E 'non necessarie e ridondanti per mantenere il markup per due volte, una volta sul server e, una volta sul client, in javascript.

di conseguenza, preferisco la prima opzione, di redering server e client solo caricare il rendering HTML.

ho incontrato diverse volte prima, e io in genere opto per la seconda, dove la vista restituisce JSON puro.

Tuttavia, l'approccio che si sceglie dovrebbe assolutamente dipenderà da diversi fattori, uno dei quali è di mira i dispositivi (e dei loro vincoli di CPU / di rete). Pure JSON generalmente comporta carichi più piccoli e quindi può essere ottimale per i dispositivi mobili.

Può anche avere senso per esporre sia le versioni JSON dei tuoi contenuti HTML e. Ciò è particolarmente utile se si sta cercando di creare un API molto leggero ad un certo punto per il tuo sito.

Infine, è possibile utilizzare una libreria come di John Resig micro-template o Chiusura Modelli per semplificare la generazione di HTML sul lato client.

Vorrei andare con la prima scelta, sine presenta più vantaggi per l'utente: caricamento della pagina immediatamente (nessuna attesa per la chiamata asincrona), non JS richiesti (per esempio per il dispositivo mobile)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top