𝗛𝗼𝘄 𝗜 𝗟𝗲𝗮𝗿𝗻𝗲𝗱 𝗔𝗯𝗼𝘂𝘁 𝗖𝗼𝗻𝘁𝗲𝘅𝘁 𝗣𝗿𝗼𝗰𝗲𝘀𝘀𝗼𝗿𝘀 𝗶𝗻 𝗗𝗷𝗮𝗻𝗴𝗼
Ik bouw een online accessoireswinkel met Django.
Ik heb een navbar gemaakt om productcategorieën te tonen. In het begin heb ik de categorieën hard-coded toegevoegd. Dit werkte een tijdje.
Toen zag ik een probleem. Als ik een nieuwe categorie toevoeg, moet ik de navbar handmatig bijwerken. Dit is inefficiënt.
Mijn eerste gedachte was om categorieën via de context in mijn view door te geven. Al snel zag ik een tweede probleem. Elke pagina heeft de navbar nodig. Dit betekent dat ik dezelfde code in elke view zou moeten herhalen. Dit zorgt voor rommelige code.
Ik vond een betere manier: Django Context Processors.
Context processors maken data beschikbaar voor alle templates. Je hoeft de data niet vanuit elke view door te geven.
Gebruik context processors voor:
- Navigatiecategorieën
- Site-instellingen
- Gebruikersmeldingen
- Winkelwagengegevens
Een context processor is een Python-functie. Deze neemt een request-object en geeft een dictionary terug.
Voorbeeld:
def custom_context(request):
return {
"custom_value": "hello from context processors"
}
Je moet de functie registreren in je settings. Voeg deze toe aan de context_processors lijst binnen de TEMPLATES instelling.
Voorbeeld:
'OPTIONS': {
'context_processors': [
'myapp.context_processors.custom_context',
],
},
Nu kun je de data als volgt in je templates gebruiken:
{{ custom_value }}
Dit loste mijn probleem op. Mijn navbar krijgt nu automatisch de categoriegegevens op elke pagina. Ik hoef geen code meer te dupliceren.
Het bouwen van features leert je vaak nieuwe concepten. Voor mij waren dat context processors.
Bron: https://dev.to/merdas369/how-i-learned-about-context-processors-in-django-5e2h