in Django

Django Tips : Membuat sendiri Django template tag

Ok kali ini saat nya saya akan cuap-cuap sedikit tentang Django Template Tag.

Apa itu template tags?, Template tag adalah sebuah tag/kode khusus di template yang memungkinkan kita menjalankan fungsi-fungsi tertentu langsung melalui template secara langsung.

Ada juga yang namanya template Filter, filter hampir sama dengan tag tetapi memiliki fungsi-fungsi yang lebih sederhana dan sebagian besar adalah untuk memformat data ketika ditampilkan. Informasi tentang filter disini.

Di Django, template hanyalah sebuah template, hanyalah file text biasa, tidak bisa dieksekusi langsung dari server/browser. Tidak harus berekstensi .html, dengan ekstensi .txt pun bisa, bahkan tanpa ekstensi pun bisa, karena hanyalah file text biasa.

Saya yakin pasti ada yang mengira template haruslah berekstensi .html :), namun pada kenyataanya tidak.

Lanjut dengan template tags, Django sudah menyediakan puluhan template tags dengan berbagai fungsi yang siap untuk digunakan, kita menyebutnya Built-in Dajngo Tags. Disini daftar lengkapnya.

Namun, ada kalanya kita memerlukan sebuah fungsi khusus yang perlu kita panggil langsung dari template sedangkan django built in tags tidak menyediakannya, inilah saatnya kita membuatnya sendiri.

MEMBUAT TEMPLATE TAG

Kali ini kita akan membuat template tag yang paling sederhana yaitu Django menyebutnya dengan “Simple Tag“.

Misal kita akan membuat template tag yang akan menampilkan 10 Post terbaru dalam sebuah aplikasi Blog kita, output dari tag ini adalah daftar postingan terbaru berupa list html (<li>…</li>).

Pertama kita siapkan keperluannya, misal nama aplikasi kita adalah blog, untuk membuat template tags, buat sebuah direktori templatetags di dalam folder aplikasi kita, dan buat file __init__.py, dan file blog_tags.py. sehinga struktur aplikasi menjadi seperti ini:

blog
    templatetags
          |__ __init__.py
          |__ blog_tags.py
    models.py
    views.py
    urls.py

Jadi dengan struktur seperti itu, Django akan segera mengenali file yang berada dalam folder templatetags adalah kode template tags, dalam hal ini file blog_tags.py. Nama file ini bisa saja berbeda, namun disini saya memakai blog_tags.py karena ini adalah template tags nya aplikasi blog.

Ok sekarang saatnya coding, buka blog_tags.py dan kita isikan kode berikut:

from django import template
from blog.models import Post

register = template.Library()

@register.simple_tag
def latest_post():
    latest = Post.objects.all()[:10]
    output = []
    for post in latest:
        output.append('<li>%s</li>' % post.title)
    return ''.join(output)

Udah, cuma segitu aja kode tag kita, yang perlu diperhatikan disini adalah:

  1. Kita mengimport module template dari django pada :  from django import template
  2. Kita membuat sebuah instance template Library yang kita beri nama register, disini kita akan mendaftarkan tag yang kita buat sehingga Django mengenalinya.
  3. Kita mendaftarkan tag kita dengan @register.simple_tag tepat diatas fungsi kita, kita mendaftarkan tag ini melalui sebuah decorator @register.simple_tag.
  4. Setelah terdaftar maka tag kita akan bisa dipanggil di template dengan nama latest_post, sesuai nama fungsi kita.

Saya tidak akan menjelaskan secara detail apa yang dikerjakan kode template tag tersebut, itu sudah sangat sederhana sekali, dan sebagian besar anda pasti sudah mengerti.

Ok, tag kita sudah jadi, sekarang tinggal panggil di template kita, namun sebelumnya ada baiknya kita re-start dulu server Django nya supaya file tag kita tadi dibaca Django. Untuk menggunakannya di template sebagai berikut:

# file template, misal index.html
{% load blog_tags %}
<ul>
{% latest_post %}
</ul>

Maka ketika di render sama Django maka akan menghasilkan seperti ini:

<ul>
<li>Judul post 1..</li>
<li>Judul post 2..</li>
<li>Judul post 3..</li>
...
...
dst...
</ul>

Tidak sulit bukan, yang perlu kita lakukkan hanyalah:

  1. Load template tags kita di template : {% load blog_tags %} . yang kita load adalah nama file tags kita tanpa exstensi .py.
  2. Panggil tag kita seperti menggunakan tag standar Django lainnya, dalam hal ini : {% latest_post %}, ingat nama tag ini sesuai nama fungsi pada file tags kita diatas.

Thats it!.. Custom template tag pertama kita sudah selesai, namun sebenarnya ini hanyalah teknik paling sederhana untuk membuat custom template tag. Django memiliki beberapa pilihan bagaimana kita akan membuat tag kita, misal nya kita bisa ganti nama tag kita dengan yang lain misal “{% post_terbaru %}“.

Atau bahkan kita bisa buat tag kita lebih flexible supaya kita bisa menentukan jumlah post yang muncul, jadi tidak fix 10, namun bisa sesuai keinginan kita.

Ok sekian dulu kali ini, topik template tag ini sebenarnya cukup luas dan ga akan habis kalau di bahas dalam satu postingan seperti ini, jadi kalau ada pertanyaan langsung aja komen dibawah ya.. :) atau pengen lebih lengkap tentang template tags, cek dokumentasinya.

FacebookShare

Write a Comment

Comment