[PYTHON] So legen Sie Variablen fest, die in der gesamten Django-App verwendet werden können ~ Praktisch für Vorlagen usw. ~

Beim Erstellen einer App mit Django ist es häufig nützlich, Konstanten (Variablen) zu haben, die auf der gesamten Site verwendet werden können.

Zum Beispiel der Text, der auf der gesamten Website angezeigt werden soll, z. B. der Name und die Version der App.

Django verwendet den Kontextprozessor, um die definierten Konstanten abzurufen. Natürlich sind mehrere Einstellungen möglich.

Umgebung

Sanft Ausführung
Nginx 1.16.1
uWSGI 2.0.18
Python 3.8.2
Django 3.0.5

Dies ist der Weg, um dies in Django 3.0.x zu tun.

Von Template behandelte Variablen werden normalerweise durch die Ansicht geleitet, aber ...

Die Vorlage ruft Variablen wie {{variable}} ab und zeigt sie an, die normalerweise durch die Ansicht geleitet werden. Diese Methode ist ineffizient, da der Prozess der Übergabe von Variablen für jede Anwendung beschrieben werden muss.

Normale Referenzmethode

test/view.py


def viewFunc(request):
  template_name = "template.html"
  context = {"variable" : "hello world!"}
  return render(request,template_name,context)

Erstellen Sie eine Ansichtsfunktion in der Ansicht Ihrer App und übergeben Sie den Wert als Kontext.

template.html


<p>{{Variablennamen}}</p>

Es wird auf diese Weise in der Vorlage angezeigt.

Festlegen von Konstanten, die in der gesamten App verwendet werden können

Durch Erstellen eines Kontextprozessors können Sie Werte / Objekte in der gesamten App übergeben.

app/settings.py


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                …
                'mlapp.context_processors.constant_text',, #Füge das hinzu
            ],
        },
    },
]

Die Funktion Konstante_text, die wir hinzufügen, erhält den Wert der Vorlage.

app/context_processors.py


def constant_text(request):
    return {
        'APP_NAME': 'TEST APP',
    }

Ich habe "APP_NAME" zu "return" hinzugefügt. Erstellen Sie "context_processors.py" im selben Verzeichnis wie "settings.py".

template.html


<p>{{ APP_NAME }}</p>

Jetzt können Sie die Variablen aus der gesamten App abrufen und in der Vorlage anzeigen. Das ist alles, also ist es einfach.

Wenn Sie in settings.py einen Wert festlegen möchten

settings.py


APP_DESCRIPTION='This is a test app.'

Erstellen Sie eine Variable in settings.py und weisen Sie den Wert zu.

app/context_processors.py


from django.conf import settings

def constant_text(request):
    return {
        'APP_NAME': 'TEST APP',
        'APP_DESCRIPTION': settings.APP_DESCRIPTION,
    }

Lesen Sie den Wert aus settings.py.

template.html


<h1>{{ APP_NAME }}</h2>
<p>{{ APP_DESCRIPTION }}</p>

Auf diese Weise können Sie auch den Wert von "settings.py" verarbeiten.

Es ist sehr leicht.

Recommended Posts

So legen Sie Variablen fest, die in der gesamten Django-App verwendet werden können ~ Praktisch für Vorlagen usw. ~
So filtern Sie die externen Schlüssel, die auf dem Django-Verwaltungsbildschirm ausgewählt werden können
Über die Angelegenheit, dass das re.compiled-Objekt für das re.match-Muster verwendet werden kann
Funktionen, die in der for-Anweisung verwendet werden können
So installieren Sie die Python-Bibliothek, die von Pharmaunternehmen verwendet werden kann
[Kleine Geschichte] Modulinstallationsmethode, wenn pip aufgrund von Proxy usw. nicht verwendet werden kann.
So richten Sie einen einfachen SMTP-Server ein, der lokal in Python getestet werden kann
[Für Anfänger] Verwendung der for-Anweisung unter Linux (Variablen usw.)
Goroutine (parallele Steuerung), die im Feld eingesetzt werden kann
[Django] Feldnamen, die für das Benutzermodell, die Benutzerregistrierung und die Anmeldemethoden verwendet werden können
So lösen Sie das Problem, dass Videoinhalte unter Firefox für Linux nicht abgespielt werden können
Goroutine, die im Feld verwendet werden kann (errgroup.Group Edition)
[Django lernt mit der Klinge des Teufels] So erhalten Sie einen Abfragesatz für die Vorwärts- / Rückwärtsreferenz
[Flask] Ich habe versucht, die "Docker-Compose-Konfiguration" zusammenzufassen, die schnell für Webanwendungen erstellt werden kann
Ich habe versucht, es zu erweitern, damit die Datenbank mit der Analysesoftware von Wiire verwendet werden kann
Verstehen Sie die Wahrscheinlichkeiten und Statistiken, die für das Fortschrittsmanagement mit einem Python-Programm verwendet werden können
So stellen Sie die Ausgabeauflösung für jeden Keyframe in Blender ein
Python-Standardmodul, das in der Befehlszeile verwendet werden kann
Können Kalman-Filter verwendet werden, um Aktienentwicklungen vorherzusagen?
Lösung für das Problem, dass Strg + z in Powershell in Docker für Windows nicht verwendet werden kann (vorläufig)
Ich habe eine generische Python-Projektvorlage erstellt
Blenden Sie die Warnung aus, dass zsh auf dem Mac standardmäßig verwendet werden kann
Wie man einen Janken-Bot macht, der leicht bewegt werden kann (Kommentar)
[Django] So übergeben Sie Werte direkt von Vorlagen-Tags an JavaScript-Variablen
Es scheint, dass alle untergeordneten Bestellungen storniert werden können, um alle übergeordneten Bestellungen (Sonderbestellungen) mit der Bitflyer-API zu stornieren
So überprüfen Sie die Version von Django
So stellen Sie die Serverzeit auf japanische Zeit ein
QPS-Steuerung, die im Feld verwendet werden kann (Ratenlimit) Begrenzt die Ausführung auf n-mal pro Sekunde
[Python3] Code, der verwendet werden kann, wenn Sie die Erweiterung eines Bildes sofort ändern möchten
Hinweise zum Erstellen von Zahlen, die mit matplotlib in Zeitschriften veröffentlicht werden können
Ich habe versucht, die Operationen zusammenzufassen, die wahrscheinlich mit numpy-stl verwendet werden
Ich habe versucht, OneHotEncoder zu erstellen, der häufig für die Datenanalyse verwendet wird, damit er den juckenden Ort erreicht.
Bibliotheken, die beim Erstellen von APIs in der Django Rest Frakework-Umgebung, in vscode-Erweiterungen usw. enthalten sein sollten (für Anfänger)
So verwenden Sie MkDocs zum ersten Mal
Dateitypen, die mit Go verwendet werden können
So drucken Sie Debug-Meldungen auf der Django-Konsole
Festlegen der CPU-Affinität für Prozessthreads
Das Problem, dass der Befehl ifconfig nicht verwendet werden kann
Übersicht und nützliche Funktionen von Scikit-Learn, die auch für Deep Learning verwendet werden können
[Jinja2] Lösung für das Problem, dass die in der for-Anweisung hinzugefügten Variablen nicht vererbt werden
Konvertieren Sie Bilder aus dem FlyCapture SDK in ein Formular, das mit openCV verwendet werden kann
Ich werde versuchen, die Links zusammenzufassen, die vorerst nützlich erscheinen
[Python] Einführung in das WEB-Scraping | Zusammenfassung der Methoden, die mit dem Webdriver verwendet werden können
So erstellen Sie eine Eigenschaft von Beziehungen, die durch bestimmte Bedingungen vorab abgerufen werden kann
Mit Raspberry Pi erstellter Dateifreigabeserver, der für Remote-Arbeiten verwendet werden kann
So legen Sie die Entwicklungsumgebung für jedes Projekt mit VSCode + Python-Erweiterung + Miniconda fest
So extrahieren Sie Bedingungen (erwerben Sie alle Elemente der Gruppe, die die Bedingungen erfüllen) für Gruppe für Gruppe
Einfache Statistiken, mit denen die Auswirkungen von Maßnahmen auf EG-Standorte und Codes analysiert werden können, die in Jupyter-Notebooks verwendet werden können
Ich habe ein Tool erstellt, um automatisch ein Zustandsübergangsdiagramm zu generieren, das sowohl für die Webentwicklung als auch für die Anwendungsentwicklung verwendet werden kann
[Neuer Mitarbeiter studiert] Lassen Sie uns die Linux-Befehle zusammenfassen, die voraussichtlich von nun an für den Netzwerkaufbau verwendet werden