2009-05-06 10 views
17

Se circa la metà delle visualizzazioni richiede lo stesso set di dati, è opportuno utilizzare un processore di contesto per rendere i dati sempre disponibili oppure esiste un modo migliore per evitare di ripetere il codice per ottenere tali dati su più viste senza interrogare il dati se non saranno usati nella vista?Quando è opportuno utilizzare i processori di contesto Django?

risposta

22

Il RequestContext inizializzazione verrà eseguito alcun processori contesto elencati nel file di impostazioni, ma prende anche un elenco di processori aggiuntivi da eseguire. Qualsiasi processore di contesto generale può essere inserito in settings.py e altri specifici possono essere aggiunti allo RequestContext caso per caso.

Invia RequestContext fuori tutto per non eseguire alcun processore di contesto.

# want context processors listed in settings.py as well as some more specific ones 
return render_to_response('template.html', {'foo':'bar'}, context_instance=RequestContext(request, processors = extra_processors)) 

# want only context processors listed in settings.py 
return render_to_response('template.html', {'foo':'bar'}, context_instance=RequestContext(request)) 

# no context processors 
return render_to_response('template.html', {'foo':'bar'}) 
+0

questa mi sembra la migliore risposta a me – Rasiel

+0

Sì, l'ho cambiato perché il bit dei processori extra era quello che stavo veramente cercando. – rennat

1

È possibile filtrare quali viste in realtà utilizzano processori di contesto da solo passando RequestContext(request) solo a coloro che ne hanno bisogno, ad esempio:

# want context processors 
return render_to_response('template.html', {'foo':'bar'}, context_instance=RequestContext(request)) 

# no context processors 
return render_to_response('template.html', {'foo':'bar'}) 
+0

penso che funzionerà per questa particolare situazione, ma cercando di pensare più grande qui: che cosa succede se ho avuto 3 o 4 funzioni del processore contesto che sono stati necessari per una vista a caso, a quel punto devo solo importarli e chiamali nelle viste che ne hanno bisogno? Perché i processori di contesto sono una specie di tutto o niente, giusto? – rennat

+3

A destra, i processori di contesto in settings.py sono tutti o nessuno con RequestContext. Un modo più flessibile per farlo sarebbe quello di sottoclasse RequestContext per ogni set di processori che si desidera e impostare lì i processori di contesto, in modo da poter disporre di SidebarContext e CommentsContext, ecc. Ciò consentirebbe anche ai processori di contesto di settings.py, che verrebbero renderli più specifici per le app, il che è meglio se hai molte app che usano processori di contesto. Quindi, avresti solo bisogno di un buon metodo per incatenarli ... – tghw

Problemi correlati