Wie übergebe ich Variablen an alle Vorlagen in django? [Duplikat]

8

Ich versuche, Variablen (Browservariable) an alle meine Vorlagen in meiner App zu übergeben. Irgendwelche Ratschläge, wie man es zur Arbeit bringt?

Anzeigen:

%Vor%

Vorlage:

%Vor%     
sharataka 19.08.2012, 22:52
quelle

3 Antworten

12

Sie, mein Freund, sind auf dem Markt für Kontext-Prozessoren.

Von einem Blog-Eintrag geschrieben von einem weit nimbler und gelehrter technischer Schriftsteller als ich:

  

Was sind Vorlagenkontextprozessoren?

     

Djangos Kontextprozessoren sind eine Einrichtung, mit der Sie Daten und Callbacks für Ihre Vorlagen bereitstellen können.

     

Sie können dies auf zwei Arten tun:

     
  • Auf individueller Basis: Übergeben Sie einen benutzerdefinierten Context -Wert an Ihren render_to_response() -Aufruf
  •   
  • Global: Durch Erstellen einer Kontext-Prozessor-Methode, die ein HttpRequest -Objekt als Eingabe akzeptiert und dann eine Payload oder einen Callback zurückgibt   Registrieren Sie den Kontextprozessor in Ihrem settings.py und geben Sie dann Ihren render_to_response() -Aufruf mit dem integrierten RequestContext -Attribut an   statt Ihrer eigenen (Sie können% ce_de% jederzeit erweitern, um natürlich weitere Daten auf Anfrage hinzuzufügen).
  •   

Wenn dieser Ansatz für die Weitergabe von Daten an Vorlagen für Sie absurd und verschleiert klingt, sind Sie nicht allein. Die Komplexität einer so einfachen Operation ist ungerechtfertigt und kontraproduktiv, aber jedes System hat seine Schwächen.

Die offizielle Dokumentation ist hier:

Ссылка

Also, aber ja, ich habe schon eine Weile mit Django programmiert, und einer der Gründe, warum ich Probleme wirklich löse, ist es, weil es in seiner Komplexität fast byzantinisch ist, aber nicht in einer dominierenden Art. Es hat eine Menge Geegaws und Doodads, die vielleicht nicht sofort nützlich erscheinen; jeder von ihnen ist entweder sehr praktisch, wenn Sie es brauchen, und es wird Ihnen aus dem Weg stehen, wenn nicht.

Das Ergebnis für Sie ist: Kontext-Prozessoren sind ein gutes Beispiel dafür. Ja.

    
fish2000 20.08.2012, 00:49
quelle
4

Momentan gibt es locals() als Variablenbereich, der auch browser enthalten sollte, aber ich finde die Verwendung von locals() sehr hässlich.

Persönlich bevorzuge ich immer ein Muster wie dieses:

%Vor%     
Wolph 19.08.2012 23:02
quelle
3

Ich kann Ihnen ein Beispiel für meinen Code geben, der gut funktioniert:

Hier ist die Datei context_processors.py

context_processors.py

%Vor%

und das ist Teil meiner base.html (eine Vorlage, die ich alle meine Seiten benutze)

base.html

%Vor%     
Vor 20.08.2012 02:54
quelle

Tags und Links