Ek bilgiler
Sayfa Görsellerinin Gösterilmesi ve Debug Modu ile Web Sunucusu İlişkisi
Admin panelinden sayfalarımıza kapak görseli yükledikten sonra bu görsellerin ne admin panelde ne de sayfada doğrudan görünmediğini fark ediyoruz. Dosyaya tıklanıldığında medya yoluna erişilememesi, Django'nun medya ve statik dosyaları varsayılan olarak doğrudan sunmamasından kaynaklanıyor. Çözüm için ana yönlendirme dosyamıza (urls.py) settings ve static fonksiyonlarını dahil edip urlpatterns listesine static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) kuralını eklememiz gerekiyor. Bu tanımlama sayesinde geliştirme ortamında Django, medya dizinindeki dosyaları tanıyarak istemciye ulaştırılabilir hale getiriyor.
Şablon tarafında görseli basarken yalnızca alan adını değil, dosyanın tam bağlantı yolunu belirtmek kritik bir detaydır. Şablon dosyamızda {{ page.cover_image.url }} yapısını kullanarak görselin web üzerindeki tam erişim adresini src özniteliğine veriyoruz. Bu adımı tamamladığımızda hem iletişim hem de hakkımızda gibi içerik sayfalarında kapak görsellerimiz sorunsuz bir şekilde render edilmeye başlıyor. İhtiyaca göre görsel boyutlandırma veya kırpma işlemleri harici araçlarla yapılabilse de temeldeki mantık veritabanında tutulan dosya yolunun template engine üzerinden doğru formatta çekilmesidir.
En can alıcı nokta ise geliştirme ile prodüksiyon ortamı arasındaki temel mimari farktır. DEBUG modunu False yaptığınız anda Django medya dosyalarını sunmayı anında keser; çünkü Django bir web sunucusu değil, bir web framework'üdür. Statik ve medya gibi sabit dosyaları istemciye iletmek Django'nun değil, Nginx veya Apache gibi gerçek web sunucularının sorumluluğundadır. Canlıya çıkıldığında bu dizinlerin harici web sunucusuna tanıtılması gerekir; DEBUG = True yapısı sadece geliştirme aşamasında hayatımızı kolaylaştıran geçici bir çözümdür.
📌 Hatırlanması Gereken Temel Noktalar (Takeaways)
- Medya URL Yapılandırması: Geliştirme ortamında yüklenen medya dosyalarına erişebilmek için
urls.py içerisinde MEDIA_URL ve MEDIA_ROOT ayarlarının static() fonksiyonuyla rotaya eklenmesi şarttır.
- Şablonda Görsel Çağırma: Şablon katmanında görselleri ekrana basarken model alanının doğrudan kendisi değil,
page.cover_image.url şeklinde .url niteliği çağrılmalıdır.
- Framework ile Sunucu Farkı: Django dinamik içerik üreten bir web framework'üdür; Nginx veya Apache gibi statik dosyaları yüksek performansla sunan bir web sunucusu değildir.
- DEBUG Modunun Rolü: Django'nun yerleşik medya sunma mekanizması yalnızca
DEBUG = True iken çalışır; canlı ortamda medya dosyalarının sunumu web sunucusuna devredilmelidir.
- ALLOWED_HOSTS Zorunluluğu:
DEBUG modu kapatıldığı anda Django güvenlik gereği ALLOWED_HOSTS listesinde belirtilmeyen hiçbir ana makine isteğine yanıt vermez.
📚 Ek Kaynaklar ve Derinlemesine Okuma Önerileri (Ek Bilgi)