Apa yang dimaksud context_processor
pada django dan apa kegunaannya?
Artikel kali ini akan membahas sekilas mengenai context processor pada django dan contoh kegunaannya secara simple.
Salah fungsi context_processors
adalah sebuah metode untuk mempermudah kita menampilkan data secara global tanpa harus membuat fungsi yang saama berulang kali di banyak views
/ templates
.
Pada sesi ini kita akan menggunakan contoh simple pada sebuah blog, yaitu related articles. Jika kita perhatikan, related articles (artikel terkait konten yang sedang kita baca pada blog tersebut) sering kali muncul di beberapa halaman bukan? Dapat berdasarkan kategori yang sama, tag yang sama, ataupun berdasarkan hal-hal lain.
Contoh simple salah satu context_processors yang digunakan pada situs syarat.id adalah seperti berikut:
Buat file bernama context_processors.py di dalam folder blog (app) kita:
- blog
- urls.py
- models.py
- views.py
- forms.py
- context_procecssors.py # file context processor kita
- core
- settings.py
- asgi.py
- urls.py
Pada file di atas, kita dapat menaruh file context_processors
ini dimanapun sesuai dengan keinginan.
Isi dari file context_processors.py
itu sendiri sebagai berikut:
from random import shuffle
from .models import Blog
# function untuk context processors
def related(request):
x = Blog.objects.filter(action='Publish')[:7]
y = list(x)
shuffle(y)
return {
'related': y
}
Pada kode di atas, kita telah membuat sebuah function
bernama related
yang akan kita gunakan untuk context_processors
kita nantinya.
Kita juga mengacak value dari function
related
tersebut menggunakan built-in function dari python yaitu shuffle
(from random import shuffle
) agar artikel yang muncul pada related artikel nantinya menjadi lebih dinamis.
Langkan selanjutnya adalah mengedit file settings.py
kita untuk mendefinisikan function
di atas.
Edit file settings.py
seperti contoh di bawah ini
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
...
# context processors yang baru kita buat
'blog.context_processors.related',
...
],
},
},
]
Pada contoh di atas, kita telah mendaftarkan custom context_processors
yang baru saja kita buat bernama related.
Selanjutnya, kita tidak perlu lagi membuat fungsi yang sama untuk menampilkan related
artikel pada setiap halaman blog/situs. Cukup dengan memanggil fungsi related seperti di bawah ini, maka value tersebut akan muncul di semua halaman.
Contoh penggunaan context_processors
sederhana pada django:
Edit file template blog_detail.html
dan tambahkan baris kode seperti berikut:
<!-- nama context procecssors kita -->
{% if related %}
<div class="related_list d-none d-lg-block">
<ul>
<!-- looping value dari context processors tersebut -->
{% for i in related %}
<li class="related_list_items"><a href="{% url 'blog_detail' i.category.category_url i.url %}">{{ i.title }}</a></li>
{% endfor %}
</ul>
</div>
{% endif %}
Pada kode html
di atas, kita menggunakan if
statement untuk menampilkan data dari fungsi related
, dan melakukan looping di dalamnya. Dan kita dapat memanggil fungsi tersebut berulang-ulang membuat related artikel pada halaman blog detail ataupun halaman lainnya sesuai dengan kebutuhan.
Contoh penggunaan dari fungsi di atas dapat teman-teman temukan pada kumpulan syarat-syarat terlengkap.
Demikian fungsi sederhana dari sebuah context_processors
dari django. Dari contoh di atas, tentunya teman-teman semua dapat ber-eksperimen sendiri untuk meng-explore lebih jauh tentang bagai mana cara menggunakan context_processors
yang lebih advance.
Terima kasih telah membaca! Keep run
the server
, don’t stop!.