2010-08-07 14 views

Respuesta

44

digamos en su archivo settings.py que tienen:

SITE_URL='www.mydomain.tld/somewhere/' 
SITE_NAME='My site' 

Si necesita que en sólo uno o dos puntos de vista:

from django.shortcuts import render_to_response 
from django.conf import settings 

def my_view(request, ...): 
    response_dict = { 
     'site_name': settings.SITE_NAME, 
     'site_url': settings.SITE_URL, 
    } 
    ... 
    return render_to_response('my_template_dir/my_template.html', response_dict) 

Si necesita acceda a estos en muchas aplicaciones y/o vistas, puede escribir un procesador de contexto para guardar el código:

James tiene un tutorial en este online.

Alguna información útil sobre el cuándo y si de los procesadores de contexto está disponible en este mismo sitio here.

dentro de su archivo my_context_processors.py lo haría:

from django.conf import settings 

def some_context_processor(request): 
    my_dict = { 
     'site_url': settings.SITE_URL, 
     'site_name': settings.SITE_NAME, 
    } 

    return my_dict 

De vuelta en su settings.py, activarla haciendo:

TEMPLATE_CONTEXT_PROCESSORS = (
    ... 

    # yours 
    'my_context_processors.some_context_processor', 
) 

En su views.py, hacer una vista usarlo de esta manera:

from django.shortcuts import render_to_response 
from django.template import RequestContext 

def my_view(request, ...): 
    response_dict = RequestContext(request) 
    ... 
    # you can still still add variables that specific only to this view 
    response_dict['some_var_only_in_this_view'] = 42 
    ... 
    return render_to_response('my_template_dir/my_template.html', response_dict) 
+1

Quiero usar estas configuraciones en mi plantilla base de la que todos los demás heredan, y estoy un poco cansado y ¿Hay alguna forma de realizar el comportamiento predeterminado para que render_to_response use un RequestContext en lugar de solo un contexto? No quiero tener que seguir agregando los mismos parámetros en todo mi código si puedo evitarlo. – Roger

+1

Puede escribir una función de envoltura alrededor de render_to_response que toma la solicitud como un argumento adicional, y en esa función: tmp_dict = RequestContext (solicitud), tmp_dict.update (response_dict) return render_to_response ('... html', tmp_dict) - esto podría haga que le sea más fácil cambiar su código en todas partes a través de las operaciones de búsqueda y reemplazo – Geradeausanwalt

+0

, eso es genial, gracias a todos. – Roger

2

Si solo necesita una configuración o dos para un par vistas, el procesador de contexto puede ser excesivo, ya que las agregará a TODAS las vistas en su aplicación. Pero si se usa en muchas plantillas, Contest Processor es el camino a seguir.

Para el sencillo fuera el caso sólo tiene que pasar cualquier otra opción que necesita desde el punto de vista de la plantilla:

from django.conf import settings 
from django.shortcuts import render_to_response 

def some_view(request): 
    val = settings.SAVED_SETTING 
    return render_to_response("index.html", { 
     'saved_setting':val 
    }) 

y acceder a la configuración de su plantilla a través de:

{{ saved_setting }} 
4

Si se utiliza una clase -based view:

# 
# in settings.py 
# 
YOUR_CUSTOM_SETTING = 'some value' 

# 
# in views.py 
# 
from django.conf import settings #for getting settings vars 

class YourView(DetailView): #assuming DetailView; whatever though 

    # ... 

    def get_context_data(self, **kwargs): 

     context = super(YourView, self).get_context_data(**kwargs) 
     context['YOUR_CUSTOM_SETTING'] = settings.YOUR_CUSTOM_SETTING 

     return context 

# 
# in your_template.html, reference the setting like any other context variable 
# 
{{ YOUR_CUSTOM_SETTING }} 
Cuestiones relacionadas