Wie ein Kontext Prozessor von einem Django App hinzufügen
-
04-10-2019 - |
Frage
sagen, ich bin ein Django-app zu schreiben, und alle Vorlagen in der App benötigen eine bestimmte Variable.
Die „klassische“ Art und Weise damit zu umgehen, afaik ist ein Kontext-Prozessor zu schreiben und es zu TEMPLATE_CONTEXT_PROCESSORS im settings.py hinzuzufügen.
Meine Frage ist, , dann ist dies der richtige Weg, es zu tun, wenn man bedenkt, dass apps sein sollte „unabhängig“ vom eigentlichen Projekt mit ihnen?
Mit anderen Worten, wenn diese App zu einem neuen Projekt bereitstellen, ist es eine Möglichkeit, das Projekt zu vermeiden, um mit seinen Einstellungen explizit mess?
Lösung
Ihre Annahme, dass Anwendungen können nur in einem Projekt hinzugefügt werden, ohne dass die Projekteinstellungen zu berühren ist nicht korrekt.
Wenn Sie eine Anwendung zu einem Projekt hinzufügen, Sie haben die Einstellungen zu bearbeiten , da Sie es im INSTALLED_APPS
Tupel hinzufügen.
Warum also nicht den Kontext Prozessorliste bearbeiten?
Andere Tipps
Kontext-Prozessoren sind sehr nützlich, und ich würde nicht mit ihnen werden, zu scheuen, aber in einigen Situationen macht es keinen Sinn machen.
Dies ist eine Technik, die ich verwende, wenn ich brauche, um etwas einfach auf alle Ansichten in einer App enthalten. Ich kann nicht bestätigen, dass dies die ‚richtige‘ Art und Weise, Dinge zu tun, aber es funktioniert für unser Team:
werde ich ein globales Wörterbuch template_vars
am Anfang der Datei deklarieren. Jede Ansicht würde seine eigenen Variablen zu diesem Wörterbuch hinzufügen und es auf die Vorlage übergeben, und es kehrt template_vars
in der render_to_response
Verknüpfung.
Es sieht ungefähr so ??aus:
template_vars = {
'spam': 'eggs',
}
def gallery(request):
"""
portfolio gallery
"""
template_vars['projects'] = Projects.objects.all()
return render_to_response('portfolio/gallery.html', template_vars, context_instance=RequestContext(request))
Ja, einen Kontext Prozessor Zugabe ist der empfohlene Ansatz, dies zu erreichen.