Blog projesinin birinci aşamasında proje oluşturmayı gördük. Projeye bir tane blog adında app eklendi. Bu çalışmada ilk çalışmada yaptığımız sayfaları biraz daha geliştirelim. Bunun için django da templates işlemlerinin nasıl yapıldığını-çalışma mantığını göreceğiz.
şimdi sırayla aşağıdaki işlemler yapılır:
1. Blog app -sağ tuş -yeni klasör e tıklayın. Bu klasörün adı templates yazmak gerekiyor.
( çünkü projemizin setting.py dosyasında bu templates in tanımlanması gerekir.Çnküdjango templates yapısında buraya bakıyor ve templates geçen yerde bu dosyaya ulaşmayı sağlıyor. bu ayarı dikkatli yapınız. Klasörünüzü oluşturduktan sonra setting.py dosyasında "TEMPLATES" bölümünü bulun ve templates klasörünü tanıtın. Aşağıda kodun nasıl eklenmesi gerektiği görülüyor.)
not: Ben Pycharm editör kullandığım için bu ayarı setting.py de otomatik tanımlamış.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates']
2. templates kalsörünün altına yine bir klasör oluşturalım-bu sefer klasörün ismine blog( yani app ile aynı ismi veriniz.) yapınız.
3. Son olarak app deki klasör yapısı ve içerisindeki html dosyalarının ilişkisi aşağıdaki gibi tasarlanmalıdır ve hazırlanmalıdır..
***blog app içine-templates-blog(artık bu klasör altına bu app ile ilgili sayfaları ekleyebilirsiniz. home.html- hakkinda.html dosyalarını ve anaşablon(base.html) olarak kullanacağımız dosyalarını oluşturun. )
*** blog isimli uygulamada bulunacak sayfaları tek bir sayfadan kalıtım aldırmak gerekir. Ne demek istiyoruz base.html (genelde bu isim verilir) gibi bizim temel bir şablon olan sayfamız olsun. diğer tüm sayfalar bu base.html den kalıtım alsın. Başka bir deyişle home.html veya hakkinda.html gibi diğer sayfaları base.html den türetelim. Böylece her bir sayfa için tekrar edecek işlemlerden kaçınmış oluruz.
Bir başka önemli aşama blog isimli uygulama projenin settings.py dosyasına tanıtılması gerekir. Bu işlem için:
- projenizin isminin altındaki, settings.py dosyasına giriniz. Burada INSTALLED_APPS kısmına aşağıdaki kodu ekleyin.
( aşağıdaki kodda geçen blog, app in adıdır. sizin app iniz neyse o isimle değiştirerek yazınız.)
'blog.apps.BlogConfig',
ŞİMDİ SAYFALARIMIZI GELİŞTİRELİM (home.html-hakkinda.html ve kalıtım aldıracağımız base.html sayfaların geliştirilmesi ve views.py içeriğinin düzenlenmesi gibi)
Blog app uygulaması altında views.py dosyasına geri dönelim. Bu dosyada sayfaların görünümü ayarlanır. İlk derste burada httpResponse ile sayfaları görüntüledik.
Şimdi bunu biraz daha geliştirelim. views.py dosyasını açalım. Kodları aşağıdaki gibi yapalım.
( burada artık ilk yaptığımızdan farklı olarak htttpResponse yerine render metodu kullanılıyor. O nedenle httpResponse ile ilgili başlık kaldırıldı.)
views.py kodları aşağıdaki gibi geliştirelim:
from django.shortcuts import render
# Create your views here.
posts = [
{
'author': 'Cemal Süreya',
'title': 'Blog Post 1',
'content': 'İlk post içeriği',
'date_posted': '30 Ağustos 2021'
}
,
{
'author': 'Ahmet Muhip Dıranas',
'title': 'Blog Post 2',
'content': 'ikinci post içeriği',
'date_posted': '10 Eylül 2021'
}
]
def home(request):
context = {
'postsA': posts
}
return render(request, 'blog/home.html', context)
def hakkinda(request):
return render(request, 'blog/hakkinda.html')
Yukarıdaki kod neyi niçin yaptık?
1.Burada artık ilk yaptığımızdan farklı olarak htttpResponse yerine render metodu kullanılıyor. O nedenle httpResponse ile ilgili import etme satırına gerek kalmadı ve koddan çıkardık.
2. Burada render-context ikilisi devreye girmiş. Peki neden?Önce context i açıklamaya çalışalım.
context bir sözlük (dictionary type) tipinde djangonun sunduğu bir sınıftır(class). render metodu ise bu context in içindeki verileri alıp kullanmamızı sağlıyor. Biz burada örnek olarak context ( context yani sözlük tipinde bir içerik oluşturduk) sınıfında içerik oluşturduk ve bu içeriği çalışmamıza render( ) metodu ile çağırıp kullandık.
ŞİMDİ SIRADA SAYFALARIMIZI(home.html, hakkinda.html) BASE.HTML İSİMLİ ANA ŞABLONA BAĞLAYALIM.
1. Bu üç tane html( base, home, hakkinda isimli) dosyasının nasıl ve nereye oluşturulması gerektiği yukarıda anlatıldı.
2. base. html içine girelim. İçine aşağıdaki kodları ekleyelim.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% if title %}
<title>Djangoihsan Blog {{ title }} </title>
{% else %}
<title>Djangoihsan Blog </title>
{% endif %}
<title>Djangoihsan Blog </title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
Dikkat ederseniz body kısmında
{% block content %} .... {% endblock}
kodları eklendi. Burası şablonun edit edilebilir yani değiştirilebilir kısmı olarak bu kod yazılarak belirlenmiş oldu.
3. home.html sayfasını açalım.
{% extends 'blog/base.html' %}
{% block content %}
{% for post in postsA %}
<h1> {{ post.title }}</h1>
<p> yazar {{ post.author }} saat {{ post.date_posted }} </p>
<p>{{ post.content }}</p>
{% endfor %}
{% endblock %}
Burada alıştığımız body-title gibi etiketleri yazmaya gerek yok çünkü bu sayfa base.html den kalıtım alacak. base.html bizim anaşablon dediğimiz html dosyamız. Zaten yukarıdaki kodda geçen
{% extends 'blog/base.html' %} ifadesi bu home.html nin base.html den kalıtım aldığını anlatan kod satırıdır. Diğer kısımlarda içeriğimiz for döngüsü ile ekrana çağırılıyor.
views py dosyasında postsA isimli sözlük tipi listenin içeriğini context-render ikilisni kullanarak sayfamızda görüntülenmesi sağlanıyor.
3. hakkinda.html sayfası içeriğine aşağıdaki kod eklenir.
{% extends 'blog/base.html' %}
{% block content %}
<h1> Blog about-Blog Hakkında </h1>
{% endblock %}
Bu sayfada yine base.html den kalıtım alıyor. Yani ana şablonu kullanmasını extends komutu ile sağlıyoruz.
0 Yorumlar