Ich bin an einen Punkt gekommen, an dem ich bestimmte Variablen an alle meine Ansichten übergeben muss (meist benutzerdefinierte Authentifizierungstypvariablen).Erstellen eines eigenen Kontextprozessors in Django
Ich wurde gesagt, meinen eigenen Kontext-Prozessor zu schreiben war der beste Weg, dies zu tun, aber ich habe einige Probleme.
Meine Einstellungen Datei sieht wie folgt aus
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.contrib.messages.context_processors.messages",
"sandbox.context_processors.say_hello",
)
Wie Sie sehen können, habe ich ein Modul ‚context_processors‘ und eine Funktion innerhalb der genannten ‚say_hello‘ genannt.
Welche sieht aus wie
def say_hello(request):
return {
'say_hello':"Hello",
}
Habe ich recht ich jetzt davon ausgehen, kann die folgende in meinen Ansichten zu tun?
{{ say_hello }}
Im Moment macht dies nichts in meiner Vorlage.
Meine Ansicht sieht aus wie
from django.shortcuts import render_to_response
def test(request):
return render_to_response("test.html")
Die 'context_instance' ist was fehlte! Danke TM – dotty
Follow-up, wie kommt es, dass ich diese context_instance brauche? Wieso brauche ich das nicht, wenn ich das Auth-System von Django benutze? – dotty
Djangos integrierte Ansichten behandeln dies für Sie (sie verwenden einen 'RequestContext'). Denken Sie an den Kontextprozessor, den Sie erstellt haben. Es nimmt "Anfrage" als Argument. Das bedeutet, dass Sie die aktuelle Anfrage irgendwie an die Rendering-Logik übergeben müssen. 'RequestContext' behandelt im Grunde nur die einfache Logik des Durchschleifens aller Kontextprozessoren und das Übergeben der aktuellen Anfrage an sie, dann das Aktualisieren des Seitenkontexts mit den Ergebnissen. –