Görüntülenme: 79

Yayın Tarihi: 23-08-2023



 

Jinja2, Python için yazılmış bir şablon motorudur ve geniş bir kullanıcı tabanına sahiptir. Flask, Django gibi popüler web uygulamaları veya diğer projelerde kullanılmak üzere tasarlanmıştır. Jinja2, HTML, XML veya diğer dilleri oluşturmak için kullanılabilecek şablonlar sağlar.

Jinja2'nin en önemli özelliklerinden biri, kullanıcı tanımlı fonksiyonlar ve filtreleri desteklemesidir. Bu özellik sayesinde, Jinja2 ile oluşturulan şablonlar içerisinde kullanıcının belirlediği kodları çalıştırabilir ve verileri daha esnek bir şekilde işleyebilir.

Jinja2 Kurulum

Flask veya Django kurulu ise Jinja2 beraberinde kuruludur.

pip install Jinja2

Sözdizim - Delimiter

Jinja2, kullanıcıların şablonlarını oluştururken kullanabilecekleri belirli bir sözdizimine sahiptir. Bu sözdizimi, Jinja2'nin nerede ne yapacağını anlamak için kullandığı delimiterlerdir. Delimiterler, Jinja2 tarafından kodun neresinde statik yazının neresinde dinamik içerik olduğunu belirlemek için kullanılır.

Varsayılan olarak, Jinja2 iki tür delimiter kullanır:

  • {{ }} : Değişkenleri yazdırmak için,
  • {% %} : Static, extend, block, döngü ve koşullar için.

Örneğin;

<h1>Merhaba, {{ kullanici_adi }}</h1>

Bu kodun içerisinde {{ kullanici_adi }} olarak tanımlanmış olan kısım Jinja2 tarafından değerlendirilecektir ve kodun çalıştırılması sırasında kullanici_adi değişkeninin değeri ekrana yazdırılacaktır. Örneğin kullanici_adi = “Ahmet” olduğunda ekran çıktısı “Merhaba, Ahmet” olacaktır.

Statik Dosyalar

Jinja2, statik dosyaların (CSS, JavaScript dosyaları vb.) şablon içerisinde kullanılmasını sağlar.

Örneğin, bir CSS dosyası şablon içerisinde nasıl kullanılır görelim:

<script src="{% static 'css/style.css' %}"></script>

Tüm statik dosyalar bu şekilde kullanılır. Bir kez de resim dosyalarından örnek görelim:

<img src="{% static 'images/logo.png' %}">

Extend

Extend özelliği, bir şablonun diğer bir şablonun içerisinde kullanılmasını veya birleştirilmesini sağlar. Mesela, header’in her sayfada aynı olmasını istiyoruz. Bu yüzden extend özelliği kullanılarak her sayfaya aynı kodu yazmak yerine, bir defa yazıp yönlendiririz.

Örneğin, ”home.html”, “header.html” ve “footer.html” adında şablon oluşturalım.

header.html şablonu;

<!DOCTYPE html>
<html>
<head>
  <title>{{ title }}</title>
</head>
<body>
  <header>
    <h1>{{ info }}</h1>
  </header>

footer.html şablonu;

  <footer>
    Copyright © {{ year }} MyCompany
  </footer>
</body>
</html>

base.html şablonu;

{% extends "header.html" %}

{% block content %}
{% endblock %}

{% extends "footer.html" %}

Bu şekilde “base.html” şablonu “header.html” ve “footer.html” şablonlarını extend ederek, tüm sayfalar için ortak olan header ve footer kısımlarını tekrar tekrar yazmak yerine bir kez yazılmasını sağlar.

Block - content

Block özelliği, bir şablonun içerisinde belirli bir bölgenin içeriğinin değiştirilebilir olmasını sağlar. Bu bölgenin içeriği, extend edilen şablon dosyası tarafından değiştirilebilir.

Yukarıda ki base.html dosyası içerisine block content özelliğini yazdık. Şimdi o özelliği kullanarak içeriği değiştirelim.

index.html adında bir şablon oluşturalım ve base.html dosyasını extend edelim.

index.html şablonunda:

{% extends "base.html" %}

{% block content %}
  <p>Welcome to the home page.</p>
{% endblock %}

Bu şekilde, “index.html” şablon dosyası “base.html” şablon dosyasını extend ederek, content block içeriğini değiştirerek kendine özgü bir içerik oluşmasını sağlar.

For Döngüsü ve Koşullar

For döngüsü ve koşullar Python sözdizimi ile aynıdır. Sadece yapıyı {% %} delimiter ile kullanın.

For ile örnek;

<ul>
  {% for item in my_list %}
    <li>{{ item }}</li>
  {% endfor %}
</ul>

Koşullar;

{% if sayi > 5 %}
  <p>{{ sayi }}, 5'ten büyüktür.</p>
{% else %}
  <p>{{ sayi }}, 5'ten küçüktür veya eşittir.</p>
{% endif %}

Daha fazla detay için https://jinja.palletsprojects.com/en/3.1.x/


Etiketler Django Jinja2
Paylaş