Django templateleri

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österme

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 (template) bir değişken (variable) yazdırmak için, değişken adını çift kıvrımlı parantez içinde şu şekilde kullanırız:

blog/templates/blog/post_list.html

{{ posts }}

Bunu blog/templates/blog/post_list.html şablonunda deneyelim. Dosyayı kod editöründe açalım ve ikinci <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:

Şekil 13.1

Gördüğümüz sadece bu:

blog/templates/blog/post_list.html

<QuerySet [<Post: İkinci gönderim>, <Post: İlk gönderim>]>

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:

blog/templates/blog/post_list.html

{% for post in posts %}
    {{ post }}
{% endfor %}

Bunu kendi template'imizle deneyelim.

Şekil 13.2

İş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:

blog/templates/blog/post_list.html

<div>
    <h1><a href="/">Django Girls Blog</a></h1>
</div>

{% for post in posts %}
    <div>
        <p>published: {{ post.published_date }}</p>
        <h1><a href="">{{ post.title }}</a></h1>
        <p>{{ post.text|linebreaksbr }}</p>
    </div>
{% endfor %}

{% for %} ve {% endfor %} arasına koyduğunuz her şey listedeki her nesne için tekrarlanır. Sayfanı yenile:

Şekil 13.3

Bu sefer biraz daha farklı bir notasyon kullandığımızın farkında mısınız ({{ post.title }} or {{ post.text }}))? Böylece Post modelinde tanımlanan alanlardaki verilere ulaşıyoruz. Ayrıca |linebreaks (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'e yükleyelim yine. Adımları hatırlayalım…

  • İlk önce kodumuzu Github'a push komutu ile yükleyelim

komut-satırı

$ git status
[...]
$ git add --all .
$ git status
[...]
$ git commit -m "Veritabanından gönderileri göstermek için template'ler değiştirildi."
[...]
$ 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:

PythonAnywhere komut-satırı

$ cd $USER.pythonanywhere.com
$ git pull
[...]
  • Son olarak, Web sekmesine gidip uygulamanızın Yenile butonuna basın. (Konsoldan diğer PythonAnywhere sayfalarına ulaşmak için, sağ üst köşedeki menü düğmesini kullanın.) Güncellemeniz https://isminiz.pythonanywhere.com adresinde yayınlanmalıdır - tarayıcıda kontrol edin! Eğer PythonAnywhere sitesindeki gönderilerin içeriği ile lokal sunucunuzda bulunan gönderilerin içeriği aynı değilse sorun değil. Lokal bilgisayarınızdaki veritabanı ile Python Anywhere'deki veritabanı, diğer dosyalarınız gibi eşitlenmiyor.

Tebrikler! Şimdi Django admin üzerinden yeni bir gönderi eklemeyi deneyin (published_date eklemeyi unutmayın!) PythonAnywhere sitenizin Django admininde olduğunuzdan emin olun, https://yourname.pythonanywhere.com/admin. Arkasından gönderileri görebilmek için oradaki sayfanızı yenileyin.

Şiir gibi çalışıyor, değil mi? Gurur duyabiliriz! Şimdi bilgisayar başından bir süre kalkalım, çünkü bir molayı hak ettik. :)

Şekil 13.4

results matching ""

    No results matching ""