Django template
Bazı verileri gösterme zamanı! Django bunun için bize faydalı bazı yerleşik template etiketleri sunuyor.
Template etiketleri nedir?
Görüyoruz ki aslında, HTML'de Python kodu yazamayız, çünkü tarayıcılar bunu anlamaz. Tarayıcılar yalnızca HTML'den anlar. Biliyoruz ki Python daha dinamik bir dil iken, HTML oldukça statiktir.
Django template etiketleri Python benzeri yapıların HTML'ye aktarılmasını sağlar, böylece dinamik web sitelerini daha kolay ve hızlı oluşturabiliriz!
Gönderi listesi template'ini göster
Bir önceki bölümde, template'e posts
değişkeni içinde gönderiler listesi verdik. Şimdi, bunu HTML'de göstereceğiz.
Django şablonunda bir değişken yazdırmak için, değişken adını çift kıvrımlı parantez içinde şu şekilde kullanırız:
{{ posts }}
Bunu blog/templates/blog/post_list.html
şablonunda deneyelim. İkinci <div>
'den üçüncü </div>
'e kadar olan her şeyi {{ posts }}
ile değiştirelim. Ne olduğunu görmek için dosyayı kaydedip sayfayı yenileyelim:
Gördüğümüz sadece bu:
[<Post: Gönderi 2>, <Post: Gönderi 1>]
Yani Django bunu bir nesneler listesi olarak algılıyor. Python'a giriş'ten listelerin nasıl gösterildiğini hatırlıyor musun? Evet, döngülerle! Bir Django template ile bunu şöyle yaparsın:
{% for post in posts %}
{{ post }}
{% endfor %}
Bunu kendi template'imizle deneyelim.
İşe yarıyor! Fakat bunların daha önce HTML'ye giriş bölümünde oluşturduğumuz statik gönderiler gibi görünmesini istiyoruz. HTML ve template etiketlerini karıştırabiliriz. body
şöyle görünecektir:
<div>
<h1><a href="/">Django Girls Blog</a></h1>
</div>
{% for post in posts %}
<div>
<p>published: {{ post.yayinlama_tarihi }}</p>
<h1><a href="">{{ post.baslik }}</a></h1>
<p>{{ post.yazi|linebreaksbr }}</p>
</div>
{% endfor %}
{% for %}
ve {% endfor %}
arasına koyduğunuz her şey listedeki her nesne için tekrarlanır. Sayfanı yenile:
{{ post.baslik }}
ya da {{ post.yazi }}
için biraz farklı bir yazım kullandığımızı farkettin mi? Böylece Post
modelinde tanımlanan alanlardaki verilere ulaşıyoruz. Ayrıca |linebreaksbr
(satırsonu), gönderilerin metnini, satır sonlarını paragraflara çeviren bir filtreden geçiriyor.
Bir şey daha
Web sitemizin İnternet'te hâlâ çalıştığını görmek iyi olacak, değil mi? PythonAnywhere yükleyelim yine. Adımları hatırlayalım...
- İlk önce kodumuzu Github'a push komutu ile yükleyelim
$ git status
[...]
$ git add --all .
$ git status
[...]
$ git commit -m "Veritabanındaki postları görebilmek için template'i değiştirdim."
[...]
$ git push
- PythonAnywhere'e bağlanalım ve Bash konsolu'na gidelim (veya yeni bir konsol açalım) ve şunu çalıştıralım:
$ cd ilk-blogum
$ git pull
[...]
- Ve son olarak da Web tab sekmesine gidip web uygulamamızdaki Reload'a basalım. Şimdi güncellememiz yayında olmalı!
Tebrikler! Şimdi devam edelim ve Django admininde yeni bir gönderi eklemeyi deneyelim (yayinlama_tarihi eklemeyi unutmayalım!), sonrasında gönderinin görünüp görünmediğini görmek için sayfayı yenileyelim.
Şiir gibi çalışıyor, değil mi? Gurur duyabiliriz! Şimdi bilgisayar başından bir süre kalkalım, çünkü bir molayı hak ettik. :)