Jak dowiedziałem się o context processorach w Django

Buduję sklep internetowy z akcesoriami przy użyciu Django.

Stworzyłem pasek nawigacji (navbar), aby wyświetlać kategorie produktów. Na początku wpisałem kategorie na sztywno (hard-coded). Przez jakiś czas to działało.

Wtedy zauważyłem problem. Jeśli dodam nową kategorię, muszę ręcznie zaktualizować pasek nawigacji. Jest to nieefektywne.

Moim pierwszym pomysłem było przekazanie kategorii przez context w widoku (view). Wkrótce dostrzegłem drugi problem. Każda strona potrzebuje paska nawigacji. Oznacza to, że musiałbym powtarzać ten sam kod w każdym widoku. Prowadzi to do powstawania niechlujnego kodu.

Znalazłem lepszy sposób: Django Context Processors.

Context procesory udostępniają dane wszystkim szablonom. Nie musisz przekazywać danych z każdego widoku.

Używaj context processorów do:

Context processor to funkcja w Pythonie. Przyjmuje ona obiekt request i zwraca słownik.

Przykład:

def custom_context(request):
    return {
        "custom_value": "witaj z context processorów"
    }

Musisz zarejestrować tę funkcję w swoich ustawieniach. Dodaj ją do listy context_processors wewnątrz ustawienia TEMPLATES.

Przykład:

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

Teraz możesz użyć tych danych w swoich szablonach w następujący sposób:

{{ custom_value }}

To rozwiązało mój problem. Mój pasek nawigacji otrzymuje teraz dane o kategoriach automatycznie na każdej stronie. Nie muszę już duplikować kodu.

Budowanie nowych funkcji często uczy nowych koncepcji. Dla mnie były to context procesory.

Źródło: https://dev.to/merdas369/how-i-learned-about-context-processors-in-django-5e2h