2011-02-23 19 views
8

Esto debería ser muy simple. Estoy bastante seguro de que he utilizado este contexto con éxito en el pasado en mis plantillas para fines de enlace. Mi creencia era que esto estaba integrado en la instancia RequestContext de una manera u otra.El contexto de la plantilla Django {{site}} no funciona?

el registro SITE_ID en mi archivo de configuración es correcto. He incluido una instancia RequestContext para todas mis vistas y he incluido la aplicación contrib.auth, que puede ser relevante en este caso.

¿El contexto {{site}} está incorporado de alguna manera o debo consultar el objeto Sites para la instancia?

gracias a todos, Brendan

Respuesta

24

Django se esfuerza por ser explícita, por lo que es poco probable que establecería cualquier contexto por él mismo. Tiene que haber un procesador de contexto que establezca {{site}} en settings.CONTEXT_PROCESSORS. Revisé django.core.context_processors y django.contrib.sites y no existe ningún procesador que establezca site. Entonces probablemente tengas un procesador de contexto de terceros que lo haga.

Es muy fácil escribir procesador de contexto:

myproject/context_processors.py: 

    from django.contrib.sites.models import Site 

    def site(request): 
     return { 
      'site': Site.objects.get_current() 
     } 

myproject/settings.py: 

    CONTEXT_PROCESSORS += ['myproject.context_processors.site'] 
+0

gracias a Skimantas, eso definitivamente responde mi pregunta. No utilicé procesadores de contexto de terceros, por lo que la capacidad previa para utilizar el sitio sigue siendo un misterio. Voy a investigar eso. Gran respuesta a mi pregunta en general, sin embargo. – Ben

2

no le dolerá para crear un procesador de contexto a medida

def site(request): 
    return {'site': Site.objects.get_current()} 

Tenga en cuenta que get_current() utiliza SITE_ID, que es una configuración global en el proyecto (definido en settings.py). Si va a admitir sitios múltiples, necesita la variable SITE_ID para cambiar su valor según el sitio actual al que acceda.

Here es un buen fragmento que lo hará funcionar.

Cuestiones relacionadas