Kısaca Nedir Bu Context Processor?

Django’da bir proje oluştururken, sürekli kullandığınız sorgu, nesne yada fonksiyonu uygulamanızı oluşturan tüm view’larda tekrar yazmaktansa context_processor.py içerisinde yazıp tüm template’de rahatça kullanabilirsiniz.

Örneğin bir web uygulaması yaptığınızı ve web uygulamasının her sayfasında sabit olarak bir kategori/menu barındırdığını varsayarsak, kategorilerin isimlerini ve id’lerini çekmek için her viewe kategorileri çekmek için sorgu eklemek yerine context_processor.py içerisine ekleyerek projemizin tüm template dosyalarında bu kategori bilgilerini çekebiliriz.

Nasıl Mı?

İlk olarak django projenizin ana uygulama dizininde bulunan context_processor.py dosyasını açalım (Yoksa aynı isimde oluşturabilirsiniz.) Sonra aşağıdaki yapıya benzer bir yapı oluşturun:

 
from models import kategori
def kategoriler(request):
    return {
        "kategoriler":kategori.objects.all(),
    }

Ardından bu eklediğimiz fonksiyonu uygulamamızın ayar dosyası olan settings.py içerisinde belirtmemiz gerekiyor. TEMPLATES değişkeninin olduğu satırı bulun. Default olarak sizi aşağıdaki gibi bir yapı karşılayacaktır. Buraya options»context_processor içerisine uygulamaAdiniz.context_processor.kategoriler eklemeniz yeterli olacaktır.

 
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [str(BASE_DIR / "templates")],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

Ekledikten sonra Şöyle bir görüntü elde edeceksiniz:

 
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [str(BASE_DIR / "templates")],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
                'uygulamaAdiniz.context_processors.kategoriler',
            ],
        },
    },
]

Artık projenizin heryerinde {{ kategoriler }} i kullanabileceksiniz. Örneğin;

 
{% for kategori in kategoriler %}
<a href="/kategori/{{kategori.id}}">{{kategori.kategori_adi}}
{% endfor %}