Django Statik Dosyalarla Çalışma
Django projelerinde sadece Python kodu yazmak yeterli değildir. Web uygulamalarının tasarımı için CSS, JavaScript, resim dosyaları, fontlar gibi dosyalar kullanılır. İşte bu dosyalara statik dosyalar (static files) denir.
1️⃣ Statik Dosya Nedir?
Statik dosyalar değişmeyen dosyalardır:
CSS dosyaları
JavaScript dosyaları
Resimler (jpg, png, svg)
Font dosyaları
Örneğin:
style.cssmain.jslogo.png
2️⃣ Django’da Statik Dosya Mantığı
Django statik dosyaları özel bir sistemle yönetir. Bunun için:
STATIC_URLSTATICFILES_DIRSSTATIC_ROOT
ayarlarını kullanır.
3️⃣ settings.py Ayarları
settings.py dosyasını açın.
STATIC_URL = 'static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
]
STATIC_ROOT = BASE_DIR / "staticfiles"
Açıklama:
| Ayar | Ne İşe Yarar |
|---|---|
| STATIC_URL | Tarayıcıya sunulan URL yolu |
| STATICFILES_DIRS | Geliştirme sırasında kullanılan klasör |
| STATIC_ROOT | Production ortamında toplanan dosyalar |
4️⃣ Proje Dizin Yapısı
Örnek proje yapısı:
proje/
│
├── static/
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── main.js
│ └── img/
│ └── logo.png
│
├── templates/
│ └── index.html
│
└── manage.py
5️⃣ Template İçinde Static Kullanımı
HTML dosyasında statik dosya kullanmak için:
{% load static %}
CSS Bağlama
<link rel="stylesheet" href="{% static 'css/style.css' %}">
JavaScript Bağlama
<script src="{% static 'js/main.js' %}"></script>
Resim Kullanımı
<img src="{% static 'img/logo.png' %}" alt="Logo">
⚠ ÖNEMLİ: {% load static %} yazmayı unutursanız hata alırsınız.
6️⃣ Uygulama İçinde Static Kullanımı (App Bazlı)
Her uygulamanın içinde ayrı static klasörü olabilir.
blog/
│
├── static/
│ └── blog/
│ └── style.css
Template içinde kullanım:
<link rel="stylesheet" href="{% static 'blog/style.css' %}">
Django otomatik olarak uygulama içindeki static klasörlerini bulur.
7️⃣ Geliştirme Ortamında Statik Dosyalar
DEBUG=True iken Django statik dosyaları otomatik sunar.
Yani ekstra ayar yapmadan çalışır:
python manage.py runserver
8️⃣ Production Ortamında collectstatic
Canlı sunucuya geçerken Django tüm statik dosyaları tek klasörde toplar.
Komut:
python manage.py collectstatic
Bu komut:
Tüm app içindeki static dosyalarını
STATICFILES_DIRS içindekileri
STATIC_ROOT klasörüne kopyalar
Production ortamda web sunucusu (örneğin Nginx) bu klasörü servis eder.
9️⃣ Örnek Mini Uygulama
style.css
body {
background-color: #f4f4f4;
font-family: Arial;
}
h1 {
color: darkgreen;
}
index.html
{% load static %}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
<h1>Django Statik Dosya Örneği</h1>
</body>
</html>
Çalıştırdığınızda CSS uygulanacaktır.
🔟 En Sık Yapılan Hatalar
❌ 1. {% load static %} unutmak
Çözüm: Template başına ekleyin.
❌ 2. STATICFILES_DIRS yanlış tanımlamak
BASE_DIR doğru olmalı.
❌ 3. collectstatic çalıştırmamak
Production ortamda mutlaka çalıştırılmalı.
1️⃣1️⃣ Media Dosyaları ile Karıştırmayın
Statik dosya ≠ Kullanıcı yüklemeleri
| Static | Media |
|---|---|
| CSS, JS, Logo | Kullanıcı profil resmi |
| Değişmez | Dinamik |
Media için ayrı ayarlar gerekir (MEDIA_URL, MEDIA_ROOT).
🎯 Özet
Django statik dosya sistemi:
staticklasörü oluşturulursettings.py ayarlanır
Template içinde
{% load static %}kullanılırProduction’da
collectstaticçalıştırılır
Django'da statik dosyalar (CSS, JavaScript, resimler, fontlar vb.) uygulamanızın "kıyafetleridir". Django'nun statik dosyaları yönetme mantığı ilk başta biraz karmaşık gelebilir, ancak temel yapıyı anladığınızda oldukça mantıklı ve güçlüdür.
Bir web sitesi sadece HTML'den ibaret değildir. Tasarımı güzelleştirmek için CSS'e, etkileşim katmak için JavaScript'e ve görselleştirmek için resimlere ihtiyaç duyarız. Django'da bu tür dosyalara Statik Dosyalar (Static Files) adı verilir.
Bu rehberde, Django projelerinize statik dosyaları nasıl ekleyeceğinizi ve yöneteceğinizi adım adım inceleyeceğiz.
1. Temel Ayarlar (settings.py)
İlk olarak Django'ya statik dosyalarımızın nerede olduğunu ve onlara hangi URL üzerinden erişeceğini söylemeliyiz. Projenizin ana dizinindeki settings.py dosyasını açın ve şu ayarları bulun (veya ekleyin):
# settings.py
# Statik dosyalara tarayıcıdan erişmek için kullanılacak URL ön eki.
STATIC_URL = 'static/'
# Django'nun statik dosyaları arayacağı ek klasörler.
# Proje ana dizininde 'static' adında bir klasör oluşturduğumuzu varsayıyoruz.
STATICFILES_DIRS = [
BASE_DIR / 'static',
]
Not:
STATIC_URLweb sitenizin adres çubuğunda görünecek yoldur (örneğin:site.com/static/css/style.css).STATICFILES_DIRSise Django'nun dosyaları fiziksel olarak bilgisayarınızda arayacağı yerdir.
2. Klasör Yapısını Oluşturma
settings.py dosyasında belirttiğimiz gibi, proje ana dizininde (manage.py dosyasının bulunduğu yer) static adında bir klasör oluşturun. Düzenli çalışmak için bu klasörün içine alt klasörler eklemeniz iyi bir pratiktir:
benim_projem/
├── manage.py
├── benim_projem/
│ ├── settings.py
│ └── urls.py
├── static/ <-- Burayı oluşturun
│ ├── css/
│ │ └── style.css <-- CSS dosyanız
│ ├── js/
│ │ └── script.js <-- JS dosyanız
│ └── images/
│ └── logo.png <-- Resim dosyanız
└── templates/
└── index.html
3. Şablonlarda (Templates) Statik Dosyaları Kullanma
Dosyalarımızı yerleştirdikten sonra, sıra onları HTML şablonlarımızda çağırmaya geldi. Django'da statik bir dosyayı çağırmak için özel şablon etiketleri (template tags) kullanırız.
HTML dosyanızın (örneğin index.html) en üstüne şu satırı ekleyerek statik dosya etiketlerini yükleyin:
{% load static %}
Artık {% static 'dosya_yolu' %} etiketini kullanarak dosyalarınızı çağırabilirsiniz. İşte tam bir örnek:
{% load static %}
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>Django Statik Dosya Eğitimi</title>
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
<h1>Django'ya Hoş Geldiniz!</h1>
<img src="{% static 'images/logo.png' %}" alt="Site Logosu">
<script src="{% static 'js/script.js' %}"></script>
</body>
</html>
4. Geliştirme (Development) vs. Canlı Ortam (Production)
Statik dosyalar konusunda Django'ya yeni başlayanların en çok kafasını karıştıran nokta burasıdır.
Geliştirme Ortamında (
DEBUG = True): Kendi bilgisayarınızda çalışırkenpython manage.py runserverkomutunu kullandığınızda, Django statik dosyaları sizin için otomatik olarak bulur ve sunar.Canlı Ortamda (
DEBUG = False): Sitenizi gerçek bir sunucuya yüklediğinizde Django, güvenlik ve performans nedenleriyle statik dosyaları kendi başına sunmaz. Nginx veya Apache gibi bir web sunucusunun bu işi yapması gerekir.
Canlı Ortam İçin collectstatic Komutu
Canlı ortama geçerken tüm uygulamalarınızdaki (örneğin admin panelinin CSS'leri dahil) ve STATICFILES_DIRS içindeki tüm statik dosyaları tek bir yerde toplamanız gerekir.
Bunun için settings.py dosyasına şunu eklersiniz:
# Dosyaların toplanacağı ana dizin (Genellikle canlı sunucuda kullanılır)
STATIC_ROOT = BASE_DIR / 'staticfiles'
Ve ardından terminalde şu komutu çalıştırırsınız:
python manage.py collectstatic
Bu komut, her yerdeki statik dosyaları alır ve staticfiles adındaki klasöre kopyalar. Sunucunuzu da (Nginx vb.) doğrudan bu klasördeki dosyaları ziyaretçilere gösterecek şekilde yapılandırırsınız.
Özetle; CSS, JS veya resim eklemek istediğinizde:
Proje dizininde
staticklasörüne dosyanızı koyun.HTML dosyanızın en üstüne
{% load static %}yazın.Dosyayı
{% static 'yol/dosya_adi.uzanti' %}şeklinde çağırın.
🌙 Django – Ramazan Temalı Statik Tasarım Uygulaması
Bu çalışmada Django projen için Ramazan ayına özel modern ve şık bir statik tasarım hazırlıyoruz.
İçerik:
Özel Ramazan arka plan tasarımı
Hilal animasyonu
Altın tonlu başlık stili
Kart tasarımı (İftar – Sahur Bilgisi)
Responsive (mobil uyumlu) yapı
Bu örnek 11. sınıf seviyesine uygun ama görsel olarak profesyonel görünecek şekilde hazırlanmıştır.
📁 1️⃣ Proje Klasör Yapısı
proje/
│
├── static/
│ ├── css/
│ │ └── ramazan.css
│ ├── js/
│ │ └── ramazan.js
│ └── img/
│ └── mosque.png
│
├── templates/
│ └── index.html
│
└── manage.py
⚙ 2️⃣ settings.py Ayarı
STATIC_URL = 'static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
]
🎨 3️⃣ Ramazan CSS Tasarımı (ramazan.css)
body {
margin: 0;
padding: 0;
background: linear-gradient(to bottom, #0f2027, #203a43, #2c5364);
font-family: 'Segoe UI', sans-serif;
color: white;
text-align: center;
}
/* Üst Başlık */
.header {
padding: 40px 20px;
}
.header h1 {
font-size: 40px;
color: gold;
text-shadow: 0 0 15px rgba(255, 215, 0, 0.7);
}
/* Hilal */
.moon {
width: 120px;
height: 120px;
background: radial-gradient(circle at 40% 40%, #fff, #ddd);
border-radius: 50%;
position: relative;
margin: 20px auto;
}
.moon::after {
content: "";
width: 120px;
height: 120px;
background: #203a43;
border-radius: 50%;
position: absolute;
left: 25px;
}
/* Kart Tasarımı */
.card {
background: rgba(255, 255, 255, 0.1);
margin: 20px auto;
padding: 25px;
width: 300px;
border-radius: 15px;
backdrop-filter: blur(8px);
box-shadow: 0 0 20px rgba(255, 215, 0, 0.3);
transition: 0.3s;
}
.card:hover {
transform: scale(1.05);
}
.card h2 {
color: gold;
}
⚡ 4️⃣ JavaScript (ramazan.js)
document.addEventListener("DOMContentLoaded", function() {
console.log("Ramazan Temalı Site Hazır 🌙");
});
🖼 5️⃣ HTML Template (index.html)
{% load static %}
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>Ramazan Özel</title>
<link rel="stylesheet" href="{% static 'css/ramazan.css' %}">
</head>
<body>
<div class="header">
<h1>🌙 Ramazan Ayı Mübarek Olsun</h1>
<div class="moon"></div>
</div>
<div class="card">
<h2>🕌 İftar Vakti</h2>
<p>19:12</p>
</div>
<div class="card">
<h2>🌅 Sahur Vakti</h2>
<p>05:03</p>
</div>
<script src="{% static 'js/ramazan.js' %}"></script>
</body>
</html>
✨ Görsel Sonuç
Bu tasarımda:
Gece mavisi degrade arka plan
Parlayan altın başlık
CSS ile yapılmış hilal şekli
Cam efekti (glassmorphism) kart tasarımı
Hover animasyonu
Profesyonel bir Ramazan teması oluşur.
🌙 Django – Bootstrap 5 ile Modern Ramazan Teması
Şimdi tasarımı bir üst seviyeye taşıyoruz 🚀
Bootstrap 5 kullanarak modern, responsive ve profesyonel bir Ramazan teması hazırlıyoruz.
Bu tasarımda:
🌙 Koyu gece teması
✨ Altın detaylar
📱 Tam responsive yapı
🎨 Bootstrap 5 grid sistemi
💎 Cam efekti kartlar
⏳ İftara kalan süre (JavaScript geri sayım)
📁 Klasör Yapısı
proje/
│
├── static/
│ ├── css/
│ │ └── ramazan.css
│ ├── js/
│ │ └── countdown.js
│
├── templates/
│ └── index.html
⚙ settings.py
STATIC_URL = 'static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
]
🎨 1️⃣ Özel CSS (static/css/ramazan.css)
body {
background: linear-gradient(to bottom, #0f2027, #203a43, #2c5364);
color: white;
font-family: 'Segoe UI', sans-serif;
}
.navbar {
background-color: rgba(0,0,0,0.6) !important;
}
.gold-text {
color: gold;
text-shadow: 0 0 10px rgba(255,215,0,0.7);
}
.glass-card {
background: rgba(255,255,255,0.1);
backdrop-filter: blur(10px);
border-radius: 15px;
box-shadow: 0 0 20px rgba(255,215,0,0.3);
transition: 0.3s;
}
.glass-card:hover {
transform: translateY(-5px);
}
.moon {
width: 100px;
height: 100px;
background: radial-gradient(circle at 40% 40%, #fff, #ddd);
border-radius: 50%;
position: relative;
margin: auto;
}
.moon::after {
content: "";
width: 100px;
height: 100px;
background: #203a43;
border-radius: 50%;
position: absolute;
left: 20px;
}
⏳ 2️⃣ Geri Sayım JS (static/js/countdown.js)
function countdown() {
const target = new Date();
target.setHours(19, 12, 0); // İftar saati
const now = new Date();
const diff = target - now;
if (diff > 0) {
const hours = Math.floor(diff / (1000 * 60 * 60));
const minutes = Math.floor((diff / 1000 / 60) % 60);
const seconds = Math.floor((diff / 1000) % 60);
document.getElementById("timer").innerHTML =
hours + "s " + minutes + "d " + seconds + "sn";
} else {
document.getElementById("timer").innerHTML = "İftar vakti geldi 🌙";
}
}
setInterval(countdown, 1000);
🖼 3️⃣ index.html (Bootstrap 5 Modern Versiyon)
{% load static %}
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>Ramazan Özel</title>
<!-- Bootstrap 5 CDN -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="{% static 'css/ramazan.css' %}">
</head>
<body>
<!-- Navbar -->
<nav class="navbar navbar-expand-lg navbar-dark">
<div class="container">
<a class="navbar-brand gold-text" href="#">🌙 Ramazan 2026</a>
</div>
</nav>
<!-- Hero Section -->
<div class="container text-center mt-5">
<h1 class="gold-text mb-4">Ramazan Ayı Mübarek Olsun</h1>
<div class="moon mb-4"></div>
</div>
<!-- Kartlar -->
<div class="container mt-5">
<div class="row justify-content-center g-4">
<div class="col-md-4">
<div class="glass-card p-4 text-center">
<h3 class="gold-text">🕌 İftar Vakti</h3>
<p class="fs-4">19:12</p>
<p>⏳ Kalan Süre:</p>
<h4 id="timer" class="gold-text"></h4>
</div>
</div>
<div class="col-md-4">
<div class="glass-card p-4 text-center">
<h3 class="gold-text">🌅 Sahur Vakti</h3>
<p class="fs-4">05:03</p>
</div>
</div>
</div>
</div>
<!-- Footer -->
<footer class="text-center mt-5 p-4">
<p class="gold-text">✨ Hayırlı Ramazanlar ✨</p>
</footer>
<script src="{% static 'js/countdown.js' %}"></script>
</body>
</html>
🎯 Bu Tasarımda Neler Öğrendin?
✅ Bootstrap 5 Grid sistemi
✅ Navbar kullanımı
✅ Responsive kart tasarımı
✅ Özel CSS ile cam efekti
✅ JavaScript ile geri sayım
✅ Django static sistemi
Yorumlar
Yorum Gönder