Django {{site}} Vorlagenkontext funktioniert nicht?

8

Dies sollte ein sehr einfacher sein. Ich bin mir ziemlich sicher, dass ich diesen Kontext in meinen Vorlagen zu Verknüpfungszwecken erfolgreich genutzt habe. Ich war der Überzeugung, dass dies irgendwie in die RequestContext-Instanz eingebaut wurde.

Der SITE_ID-Eintrag in meiner Einstellungsdatei ist korrekt. Ich habe eine RequestContext-Instanz für alle meine Ansichten eingefügt und die App contrib.auth hinzugefügt, die in diesem Fall relevant sein kann.

Ist der {{site}} -Kontext irgendwie eingebaut oder sollte ich das Sites-Objekt für die Instanz abfragen?

danke allen, Brendan

    
Ben 23.02.2011, 17:33
quelle

2 Antworten

24

Django ist bestrebt, explizit zu sein, daher ist es unwahrscheinlich, dass es irgendeinen Kontext für sich selbst festlegen würde. Es muss einen Kontextprozessor geben, der {{site}} in settings.CONTEXT_PROCESSORS setzt. Ich habe django.core.context_processors und django.contrib.sites überprüft und es gibt keinen solchen Prozessor, der site setzt. Sie hatten wahrscheinlich einen Kontextprozessor von Drittanbietern, der das macht.

Es ist sehr einfach, den Kontextprozessor zu schreiben:

%Vor%     
Ski 23.02.2011, 18:29
quelle
2

Es tut nicht weh, einen benutzerdefinierten Kontextprozessor zu erstellen

%Vor%

Beachten Sie, dass get_current () SITE_ID verwendet. Dies ist eine globale Einstellung im Projekt (definiert in settings.py). Wenn Sie Multi-Sites unterstützen möchten, müssen Sie die Variable SITE_ID verwenden, um den Wert abhängig von der aktuellen Site, auf die zugegriffen wird, zu ändern.

Hier ist ein nettes Snippet, das es zum Laufen bringt.

    
gladysbixly 23.02.2011 18:51
quelle