2009-05-06 13 views
17

Si aproximadamente la mitad de mis vistas requieren el mismo conjunto de datos, ¿es apropiado usar un procesador de contexto para hacer que los datos estén siempre disponibles, o hay una mejor manera de evitar repetir el código para obtener esos datos en varias vistas sin consultar el datos si no se usará en la vista?¿Cuándo es apropiado usar procesadores de contexto Django?

Respuesta

22

El inicializador RequestContext se ejecutará ningún procesadores de contexto que figuran en el archivo de configuración, pero también toma una lista de procesadores adicionales para ejecutar. Cualquier procesador de contexto de propósito general se puede poner en settings.py y se pueden agregar más específicos al RequestContext caso por caso.

Deje RequestContext en total para que no se ejecute ningún procesador de contexto.

# 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

esto parece ser la mejor respuesta para mí – Rasiel

+0

Sí, lo cambié porque el bit de los procesadores extra era lo que realmente buscaba. – rennat

1

Puede filtrar los cuales vistas realmente utilizan procesadores de contexto sólo pasa RequestContext(request) sólo para los que lo necesitan, por ejemplo:

# 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

Creo que va a trabajar para esta situación particular, pero tratando de pensar en grande aquí: ¿y si yo tenía 3 o 4 funciones del procesador de contexto que se necesitaban por las vistas al azar, en ese momento me limito a importarlos y llamarlos en las vistas que los necesitan? Porque los procesadores de contexto son una especie de todo o nada ¿verdad? – rennat

+3

Derecha, los procesadores de contexto en settings.py son todos o ninguno con RequestContext. Una forma más flexible de hacerlo sería crear una subclase de RequestContext para cada conjunto de procesadores que desee y establecer allí los procesadores de contexto, de modo que podría tener SidebarContext y CommentsContext, etc. Esto también obtendría procesadores de contexto de settings.py, lo que haría hacerlos más específicos de la aplicación, lo cual es mejor si tiene muchas aplicaciones que usan procesadores de contexto. Entonces, necesitarías una buena forma de encadenarlos ... – tghw

Cuestiones relacionadas