𝗪𝗶𝗲 𝗶𝗰𝗵 𝗲𝘁𝘄𝗮𝘀 ü𝗯𝗲𝗿 𝗖𝗼𝗻𝘁𝗲𝘅𝘁 𝗣𝗿𝗼𝗰𝗲𝘀𝘀𝗼𝗿𝘀 𝗶𝗻 𝗗𝗷𝗮𝗻𝗴𝗼 𝗴𝗲𝗹𝗲𝗿𝗻𝘁 𝗵𝗮𝗯𝗲

Ich baue gerade einen Online-Shop für Accessoires mit Django.

Ich habe eine Navigationsleiste erstellt, um Produktkategorien anzuzeigen. Zuerst habe ich die Kategorien hartcodiert. Das hat eine Zeit lang funktioniert.

Dann bemerkte ich ein Problem. Wenn ich eine neue Kategorie hinzufüge, muss ich die Navigationsleiste manuell aktualisieren. Das ist ineffizient.

Mein erster Gedanke war, die Kategorien über den Context in meiner View zu übergeben. Bald bemerkte ich jedoch ein zweites Problem. Jede Seite benötigt die Navigationsleiste. Das bedeutet, dass ich denselben Code in jeder einzelnen View wiederholen müsste. Das führt zu unübersichtlichem Code.

Ich habe einen besseren Weg gefunden: Django Context Processors.

Context Processors machen Daten für alle Templates verfügbar. Man muss die Daten nicht aus jeder View übergeben.

Nutze Context Processors für:

Ein Context Processor ist eine Python-Funktion. Sie nimmt ein Request-Objekt entgegen und gibt ein Dictionary zurück.

Example:

def custom_context(request):
    return {
        "custom_value": "hello from context processors"
    }

Du musst die Funktion in deinen Einstellungen registrieren. Füge sie der context_processors-Liste innerhalb der TEMPLATES-Einstellung hinzu.

Example:

'OPTIONS': {
    'context_processors': [
        'myapp.context_processors.custom_context',
    ],
},

Jetzt kannst du die Daten in deinen Templates so verwenden:

{{ custom_value }}

Das hat mein Problem gelöst. Meine Navigationsleiste erhält nun auf jeder Seite automatisch die Kategorie-Daten. Ich muss den Code nicht mehr duplizieren.

Das Entwickeln von Funktionen lehrt einen oft neue Konzepte. Für mich waren es Context Processors.

Quelle: https://dev.to/merdas369/how-i-learned-about-context-processors-in-django-5e2h