چطور درباره Context Processors در Django یاد گرفتم

من در حال ساخت یک فروشگاه آنلاین لوازم جانبی با Django هستم.

من یک navbar برای نمایش دسته‌بندی محصولات ساختم. در ابتدا، دسته‌بندی‌ها را به صورت hard-coded نوشتم. این روش برای مدتی کار کرد.

سپس با یک مشکل مواجه شدم. اگر دسته‌بندی جدیدی اضافه کنم، باید navbar را به صورت دستی به‌روزرسانی کنم. این کار ناکارآمد است.

اولین فکرم این بود که دسته‌بندی‌ها را از طریق context در view خود ارسال کنم. اما خیلی زود با مشکل دوم مواجه شدم. هر صفحه‌ای به navbar نیاز دارد. این یعنی باید همان کد را در تک‌تک viewها تکرار کنم که باعث شلوغ و نامنظم شدن کد می‌شود.

راه بهتری پیدا کردم: Django Context Processors.

Context processorها داده‌ها را در دسترس تمام templateها قرار می‌دهند. دیگر نیازی نیست داده‌ها را از هر view ارسال کنید.

از context processorها برای موارد زیر استفاده کنید:

یک context processor یک تابع پایتون است. این تابع یک شیء request را می‌گیرد و یک دیکشنری برمی‌گرداند.

Example:

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

شما باید تابع را در settings خود ثبت کنید. آن را به لیست context_processors در داخل تنظیمات TEMPLATES اضافه کنید.

Example:

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

حالا می‌توانید از داده‌ها در templateهای خود به این صورت استفاده کنید:

{{ custom_value }}

این مشکل من را حل کرد. حالا navbar من در هر صفحه به طور خودکار داده‌های دسته‌بندی را دریافت می‌کند. دیگر کدها را تکرار نمی‌کنم.

ساخت قابلیت‌های جدید اغلب باعث یادگیری مفاهیم جدید می‌شود. برای من، این مفهوم context processorها بود.

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