Wenn Sie grundsätzlich feste Konstantenwerte wie Domänenname und Site-Name in der Django-Vorlage verarbeiten möchten, verwenden Sie die Funktion "Kontextprozessor" und übergeben Sie die Konstante nicht jedes Mal von der Ansichtsseite, genau wie eine Konstante aus der Vorlage. Kann gehandhabt werden.
Der Kontextprozessor ist eine Funktion, die das Hinzufügen von Variablen beim Übergeben eines Kontextobjekts aus einer Ansicht an eine Vorlage beschreiben kann.
In der Vorlage verwendete Csrf_token
usw. werden durch diesen Mechanismus implementiert.
Der Kontextprozessor ist als eine Funktion definiert, die ein HTTP-Anforderungsobjekt als Argument verwendet und ein Objekt vom Typ Wörterbuch zurückgibt.
Erstellen Sie die Funktion mit einem beliebigen Namen und erstellen Sie die Datei im Anwendungsverzeichnis.
hogeapp/context_processors.py
def my_context_processor(req):
return {
'domain_name': 'https://hogehoge.com',
'site_name': 'Hogehoge Site',
}
Im obigen Beispiel wird das Wörterbuchobjekt einfach zurückgegeben, aber der Prozess kann auf die gleiche Weise wie eine normale Funktion beschrieben werden. Sie können dies auch verwenden, um auf eine separat definierte Konstante in einer externen Datei zu verweisen oder den Wert einer Umgebungsvariablen je nach Umgebung zu ändern.
Um den erstellten Kontextprozessor zu verwenden, müssen Sie ihn in config.py
festlegen.
Fügen Sie die im vorherigen Abschnitt erstellte Funktion zu context_processors
in OPTIONS of TEMPLATES hinzu, die in config.py
definiert sind.
config.py
TEMPLATES = [
{
'OPTIONS': {
'context_processors': [
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'hogeapp.context_processors.my_context_processor', #hinzufügen
],
},
},
]
Vom Kontextprozessor hinzugefügte Variablen können innerhalb der Vorlage auf dieselbe Weise wie reguläre Kontextvariablen verwendet werden.
template.html
<link rel="icon" href="{{ domain_name }}/favicon.ico">
<title>{{ site_name }}</title>
The Django template language: for Python programmers |Django-Dokumentation| Django https://docs.djangoproject.com/ja/2.2/ref/templates/api/#writing-your-own-context-processors
Recommended Posts