איך למדתי על Context Processors ב-Django

אני בונה חנות אביזרים מקוונת באמצעות Django.

בניתי navbar כדי להציג קטגוריות מוצרים. בהתחלה, הקטגוריות היו hard-coded. זה עבד במשך זמן מה.

ואז ראיתי בעיה. אם אני מוסיף קטגוריה חדשה, אני חייב לעדכן את ה-navbar ידנית. זה לא יעיל.

המחשבה הראשונה שלי הייתה להעביר את הקטגוריות דרך ה-context ב-view שלי. מהר מאוד ראיתי בעיה שנייה. כל דף זקוק ל-navbar. זה אומר שאצטרך לשכפל את אותו הקוד בכל view. זה יוצר קוד מבולגן.

מצאתי דרך טובה יותר: Django Context Processors.

Context processors הופכים נתונים לזמינים עבור כל ה-templates. אין צורך להעביר נתונים מכל view.

השתמש ב-context processors עבור:

Context processor הוא פונקציית Python. היא מקבלת אובייקט request ומחזירה dictionary.

דוגמה:

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

עליך לרשום את הפונקציה ב-settings שלך. הוסף אותה לרשימת ה-context_processors בתוך הגדרת ה-TEMPLATES.

דוגמה:

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

כעת, ניתן להשתמש בנתונים ב-templates שלך כך:

{{ custom_value }}

זה פתר לי את הבעיה. ה-navbar שלי מקבל כעת נתוני קטגוריות באופן אוטומטי בכל דף. אני כבר לא משכפל קוד.

פיתוח פיצ'רים מלמד לעיתים קרובות מושגים חדשים. עבורי, אלו היו context processors.

מקור: https://dev.to/merdas369/how-i-learned-about-context-processors-in-django-5e2h