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:
- Kategorii nawigacyjnych
- Ustawień witryny
- Powiadomień użytkownika
- Danych koszyka zakupowego
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