Django-യിലെ Context Processors-നെ കുറിച്ച് ഞാൻ എങ്ങനെ പഠിച്ചു
ഞാൻ Django ഉപയോഗിച്ച് ഒരു ഓൺലൈൻ ആക്സസറീസ് ഷോപ്പ് നിർമ്മിക്കുകയാണ്.
ഉൽപ്പന്നങ്ങളുടെ കാറ്റഗറികൾ കാണിക്കുന്നതിനായി ഞാൻ ഒരു navbar നിർമ്മിച്ചു. തുടക്കത്തിൽ, ഞാൻ കാറ്റഗറികൾ ഹാർഡ്-കോഡ് (hard-code) ചെയ്തു. കുറച്ചു കാലത്തേക്ക് ഇത് ശരിയായി പ്രവർത്തിച്ചു.
പിന്നീട് ഞാൻ ഒരു പ്രശ്നം കണ്ടു. ഒരു പുതിയ കാറ്റഗറി ചേർക്കുകയാണെങ്കിൽ, എനിക്ക് navbar മാനുവൽ ആയി (manually) അപ്ഡേറ്റ് ചെയ്യേണ്ടി വരും. ഇത് കാര്യക്ഷമമല്ല.
എന്റെ view-യിലെ context വഴി കാറ്റഗറികൾ പാസ്സ് ചെയ്യുക എന്നതായിരുന്നു എന്റെ ആദ്യത്തെ ചിന്ത. എന്നാൽ ഉടൻ തന്നെ രണ്ടാമതൊരു പ്രശ്നം ഞാൻ കണ്ടു. എല്ലാ പേജുകൾക്കും navbar ആവശ്യമാണ്. ഇതിനർത്ഥം ഓരോ view-യിലും എനിക്ക് ഒരേ കോഡ് തന്നെ ആവർത്തിക്കേണ്ടി വരും എന്നാണ്. ഇത് കോഡ് സങ്കീർണ്ണമാക്കും (messy code).
ഇതിനൊരു മികച്ച വഴി ഞാൻ കണ്ടെത്തി: Django Context Processors.
Context processors എല്ലാ ടെംപ്ലേറ്റുകൾക്കും ഡാറ്റ ലഭ്യമാക്കുന്നു. ഓരോ view-ൽ നിന്നും ഡാറ്റ പാസ്സ് ചെയ്യേണ്ട ആവശ്യമില്ല.
ഇവയ്ക്കായി context processors ഉപയോഗിക്കാം:
- Navigation categories
- Site settings
- User notifications
- Shopping cart data
ഒരു context processor എന്നത് ഒരു Python function ആണ്. ഇത് ഒരു request object സ്വീകരിക്കുകയും ഒരു dictionary തിരികെ നൽകുകയും ചെയ്യുന്നു.
Example:
def custom_context(request):
return {
"custom_value": "hello from context processors"
}
നിങ്ങൾ ഈ function നിങ്ങളുടെ settings-ൽ രജിസ്റ്റർ ചെയ്യണം. TEMPLATES setting-നുള്ളിലെ context_processors ലിസ്റ്റിൽ ഇത് ചേർക്കുക.
Example:
'OPTIONS': {
'context_processors': [
'myapp.context_processors.custom_context',
],
},
ഇനി, നിങ്ങളുടെ ടെംപ്ലേറ്റുകളിൽ ഈ ഡാറ്റ ഇപ്രകാരം ഉപയോഗിക്കാം:
{{ custom_value }}
ഇത് എന്റെ പ്രശ്നം പരിഹരിച്ചു. എന്റെ navbar ഇപ്പോൾ എല്ലാ പേജുകളിലും സ്വയമേവ (automatically) കാറ്റഗറി ഡാറ്റ ലഭിക്കുന്നു. ഇനി എനിക്ക് കോഡ് ആവർത്തിക്കേണ്ടതില്ല.
പുതിയ ഫീച്ചറുകൾ നിർമ്മിക്കുന്നത് പലപ്പോഴും പുതിയ കാര്യങ്ങൾ പഠിക്കാൻ സഹായിക്കും. എനിക്ക് അത് context processors ആയിരുന്നു.
Source: https://dev.to/merdas369/how-i-learned-about-context-processors-in-django-5e2h