Flask Tutorial Templates

2-FlaskTemplates

Templates

  • Flask'a merhaba dedikten sonra bu bölümde biraz template'ler ile haşır neşir olacağız.
  • index() methodumuzu birazcık geliştirelim.

myapp/routes.py

 

hello2

  • index() methodumuz bize yine bir string dönüyor ancak bu string HTML kodları barındırıyor. Web browser'da görüntülediğimiz zaman da bu string yani HTML kodları yorumlanacak ve yukarıdaki görünüm elde edilecek.
  • Fark ettiyseniz index() methodunun döndüğü HTML kodları içeren string işi bayağı yokuşa sürüyor. Eğer projeniz büyürse ve siz çeşitli html sayfalarına ihtiyaç duyacak olursanız, gerçekten takibi, yazımı eziyet veren bir durum halini alacaktır bu durum.
  • Yazılım geliştirmede clean code (temiz, anlaşılır kod), modularization (modülerlik) gibi prensipler projenin takibi, sürdürülebilirliği, test edilebilirliği vb. açısından çok önemlidir.
  • Şimdi biz projemizi daha modüler hale getirelim ve şu eziyetten kurtulalım. myapp/ klasörü altında templates adında bir klasör oluşturalım. HTML dosyalarımız burada duracak.

myapp/templates/index.html

 

myapp/routes.py

 
  • Flask varsayılan olarak myapp/ altındaki templates klasörüne bakıyor ve index.html var ise bizim için html sayfasını render_template methodu yardımıyla işliyor(render ediyor).
  • Methoda verilen diğer parametreler ile de html sayfasına python tarafından veri göndermiş oluyoruz. Python tarafından title parametresine 'Anasayfa' stringini , user'a da dictionary tipindeki objeyi atadık.
  • index.html'deki {{ ... }} süslü parantezleri jinja template engine'ın bize sunduğu template dilidir.
  • Kodlarınızda değişiklikleri yaptıktan sonra tekrar çalıştırdığınızda aynı sonucu alacaksınız.

Jinja2 template diline biraz daha bakalım.

  • index.html dosyamızı düzenliyoruz.
 

def index() methodumuzu da düzenleyelim.

 
  • Bu defa python tarafından dictionary objeleri içeren bir liste gönderdik.
  • Eğer title boş değilse belirlenmiş title'ı yazacak boş ise 'Home' olacak.
  • index.html dosyasında Jinja template dilinde yazılan {% if %}, {% for ..%} kullanımlarını görüyorsunuz. {% endif %} ve {%endfor%} ile de if ve for statementlarını kapatıyoruz.
  • posts listesini for dögüsüne alıp elemanlarına erişimi de javascript dilindeki gibi nokta(.) ile yapıyoruz. (post.author, post.body).

jinja_templates

Template Inheritance (Template Kalıtımı)
  • Web sitelerinde her sayfada değişmeyen temel kodlar, menüler, navigation-bar.. gibi bölümler olur. Bunları tekrar tekrar yazmak zorunda değiliz.
  • Jinja2'nın bize sunduğu template inheritance özelliğini kullanacağız.

myapp/templates/ altında base.html dosyasını oluşturalım. Bu bizim temel template'imiz olacak.

 

index.html dosyası:

 
  • extends 'base.html'diyerek temel template'ten kalıtım sağladık.
  • index.html'deki {%block content%} .. {%endblock%} arasına yazacağımız html kodları artık base.html'deki block content ... endblock kodlarına karşılık gelecek.
  • Bundan sonra aynı kodları tekrar tekrar yazmak zorunda değiliz.

 

 

Yorumlar