Come posso inserire un blocco di contenuti generati dinamicamente in un modello django?

StackOverflow https://stackoverflow.com/questions/1024220

  •  06-07-2019
  •  | 
  •  

Domanda

Voglio includere elementi come lo stato di Twitter o deliziosi tag nei miei modelli di django.

Queste cose sono dinamiche, ma regolari. Come verrebbe fatto?

È stato utile?

Soluzione

Esistono diversi modi per gestirlo, quindi puoi scegliere un metodo che si adatti meglio al tuo stile personale o ai tuoi requisiti:

  1. Variabile di contesto del modello : come ha risposto Alex, puoi inserire i tuoi contenuti in una variabile di contesto che è inclusa nel contesto di ogni modello creato da ogni vista. Django fornisce anche un meccanismo per farlo automaticamente, chiamato processore di contesto . Pro: molto semplice. Contro: non aggiornerà dinamicamente i nuovi contenuti sui browser client.

  2. Caricamento dinamico AJAX : come menzionato da Alex e Dave, puoi caricare dinamicamente i tuoi contenuti utilizzando i metodi AJAX. Ad esempio usando jQuery, inseriresti un segnaposto nel tuo modello come <div id="twitterfeed"></div> e poi in un blocco javascript nel tuo modello metterai $("#twitterfeed").load("{% url twitterfeed %}"); dove twitterfeed è un url così chiamato nel tuo urls.py. Pro: aggiornerà dinamicamente i browser. Contro: può essere complicato se non conosci Javascript.

  3. Tag di inclusione : Django fornisce un tipo di tag modello chiamato tag di inclusione , che è fondamentalmente un tag modello personalizzato in grado di eseguire il rendering di contenuti dinamici. In un certo senso è simile a una variabile di contesto, tranne per il fatto che il codice per generare il contenuto verrà chiamato solo quando si utilizza il tag del modello personalizzato nel modello anziché essere chiamato per ogni vista. Un altro vantaggio è che il contenuto è generato da un modello a sé stante. Ovviamente potresti farlo con una normale variabile di contesto, ma non è così pulito (IMHO) come usare un tag di inclusione. Pro: molto semplice, pulito. Contro: non aggiornerà dinamicamente i nuovi contenuti sui browser client.

Altri suggerimenti

L'approccio più semplice è usare {{ mycontent }} nel tuo modello (dove vuoi che appaia il contenuto generato dinamicamente) e mettere la corrispondenza tra mycontent e il suo valore nel contesto che usi per renderizzare il modello - cioè, la parte più fondamentale del modello di django.

Se ciò che vuoi dire è che desideri il supporto Ajax per cui Javascript nella pagina aggiorna continuamente tale contenuto in base a ciò che il server vuole che sia in qualsiasi momento, ti suggerisco di esaminare dojango , il progetto di integrazione Dojo / Django - non è ancora completamente maturo come ciascuno di Dojo e Django sono soli (non versione 0.4), ma è già utilizzabile e utile.

Una tecnica comune è quella di lasciare un div segnaposto nel contenuto generato, quindi riempire il div sul lato client tramite una chiamata AJAX da Javascript che includi nella pagina.

Questo ti dà il vantaggio di avere una pagina principale memorizzabile nella cache (caricamento veloce), con bit dinamici separati. A seconda di come vuoi i bit dinamici, puoi anche memorizzarli nella cache per periodi più brevi.

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