2011-09-19 7 views
12

sto cercando di ottenere semplicemente la corrente Site all'interno di un modello per l'analisi in questo modo:Il sito corrente è accessibile da un modello?

<h3>{{ site.name }}</h3> 

Purtroppo, questo non sta portando nulla fino.

C'è un modo per ottenere l'accesso al sito corrente da un modello?

risposta

25

Il titolo della domanda presume che "vista" e "modello" siano intercambiabili - non lo sono. Per ottenere il sito corrente in un modello, è necessario aggiungerlo al contesto utilizzato per il rendering del modello. Se stai usando un RequestContext, puoi scrivere un processore di contesto per farlo automaticamente.

È possibile scrivere un processore contesto per farlo in questo modo:

from django.contrib.sites.models import Site 

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

Poi, aggiungerlo al TEMPLATE_CONTEXT_PROCESSORS, e usarlo in questo modo:

<h3>{{ site.name }}</h3> 
+0

sto usando 'django.views.generic.simple.direct_to_template', quindi dovrei essere coperto, giusto? Non c'è un processore di contesto integrato per questo? –

+0

Sì, 'direct_to_template' usa' RequestContext', tuttavia è necessario scrivere il proprio processore di contesto poiché non ce n'è uno in Django. In alternativa puoi passare un argomento a 'direct_to_template' che aggiunge il sito corrente al contesto. –

+0

Perché la funzione si chiama 'site_processor' invece di' site'? –

0

Stranamente, utilizzando il processore bradleyayers ha dato risultati Null, quindi invece di usare il framework del sito, ho usato il parametro all'interno della richiesta.

Così il processore sarà simile a quanto segue:

def host_processor(request): 
    return { 'host': request.get_host() } 

Speranza ha aiutato

Problemi correlati