Django'da Context Processor'ları Nasıl Öğrendim
Django ile çevrimiçi bir aksesuar mağazası oluşturuyorum.
Ürün kategorilerini göstermek için bir navbar oluşturdum. Başlangıçta kategorileri hard-coded olarak yazdım. Bu bir süre işe yaradı.
Sonra bir sorun fark ettim. Yeni bir kategori eklediğimde, navbar'ı manuel olarak güncellemem gerekiyordu. Bu verimsiz bir yöntemdi.
İlk düşüncem, kategorileri view içindeki context aracılığıyla iletmekti. Kısa süre sonra ikinci bir sorunla karşılaştım. Her sayfanın navbar'a ihtiyacı vardı. Bu da her bir view içinde aynı kodu tekrar etmem gerektiği anlamına geliyordu. Bu da karmaşık bir kod yapısı oluşturuyordu.
Daha iyi bir yol buldum: Django Context Processors.
Context processor'lar verileri tüm template'ler için erişilebilir hale getirir. Verileri her view'dan tek tek iletmenize gerek kalmaz.
Şunlar için context processor'ları kullanın:
- Navigasyon kategorileri
- Site ayarları
- Kullanıcı bildirimleri
- Alışveriş sepeti verileri
Bir context processor, bir Python fonksiyonudur. Bir request nesnesi alır ve bir sözlük (dictionary) döndürür.
Örnek:
def custom_context(request):
return {
"custom_value": "context processor'lardan merhaba"
}
Fonksiyonu settings dosyanızda kaydetmeniz gerekir. Onu TEMPLATES ayarı içindeki context_processors listesine ekleyin.
Örnek:
'OPTIONS': {
'context_processors': [
'myapp.context_processors.custom_context',
],
},
Artık verileri template'lerinizde şu şekilde kullanabilirsiniz:
{{ custom_value }}
Bu sorunumu çözdü. Navbar'ım artık her sayfada kategori verilerini otomatik olarak alıyor. Artık kod tekrarı yapmama gerek kalmadı.
Yeni özellikler geliştirmek size sık sık yeni kavramlar öğretir. Benim için bu, context processor'lar oldu.
Kaynak: https://dev.to/merdas369/how-i-learned-about-context-processors-in-django-5e2h