Banyaknya teknik untuk menampilkan halaman statis ini ternyata semakin membuat saya bingung apalagi saya menggunakan Django di Appengine yang tidak mendukung semua modul Django standar. Masih tetap penasaran, bagaimana caranya ya ? Setalah putar otak sedikit sambil buka dokumentasi lagi akhirnya ketemu cara menampilkan halaman html statis yang saya inginkan tanpa perlu menggunakan tag {{% include %}}.
Uniknya, caranya ternyata sangat simpel dan mudah dan tak perlu modul macam-macam karena tinggal gimana kita bisa memodifikasi tampilan yang akan kita buat. Berikut contoh sederhanya, pertama kita buat halaman statis yang akan kita buat dan letakan pada template yang telah kita buat. Misalnya kita akan membuat tampilan tulisan berikut :
HTML Statis
Ini halaman statis yang ditampilkan lewat views.pyDi Django, setiap block template yang kita buat agar dapat menampilkan konten block yang kita inginkan harus dilengkapi dengan tag {{ }} atau {% %} yang harus kita isi dengan variabel yang berisi value yang telah kita definisikan di views.py seperti contohnya {{ statis.content }} atau {% if var %}, bisa berisi string konten yang ingin kita tampilkan {{ '<h1>HTML Statis</h1>' }} dan bisa juga berisi tag dengan string kosong seperti ini {{ '' }}.
Dibawah ini merupakan template induk yang akan kita tampilkan di browser, yang diberi nama 'base.html' :
#base.html
<html>
<head>
<title Contoh Ajah </title>
</head>
<body>
{% block statis %}{% endblock %}
</body>
</html>
Berikut template yang kita buat, yang merupakan turunan (inherit) dari 'base.html', kita bisa membuat template dengan menggunakan tag filter {% ifequal %} seperti ini :
#template.html
{% extends "base.html" %}
{% block statis %}
{% ifequal html_statis "" %}
<h1>HTML Statis</h1>
<h3>Ini halaman statis yang ditampilkan lewat views.py</h3>
{% endifequal %}
{% endblock %}
Setelah itu kita buat kode untuk menampilkan template :
#views.py
def index(request):
tpl = loader.get_template('template.html')
ctx = Context({
'html_statis':'',
})
return HttpResponse(tpl.render(ctx))
Atau kita dapat menggunakan 'dummy' context di views.py seperti ini :
def index(request):
tpl = loader.get_template('template.html')
ctx = Context({
'html_statis':'string ini hanya pajangan',
})
return HttpResponse(tpl.render(ctx))
Dengan membuat template seperti ini :
#template.html
{% extends "base.html" %}
{% block statis %}
{% if html_statis %}
<h1>HTML Statis</h1>
<h3>Ini halaman statis yang ditampilkan lewat views.py</h3>
{% endif %}
{% endblock %}
Selain dengan cara di atas kita juga bisa membuat langsung di 'views.py' string HTML statis yang akan kita tampilkan (cara ini tidak direkomendasikan dalam Django)
# views.py
def index(request):
statis = {'content':"""<h1>HTML Statis</h1>
<h3>Ini halaman statis yang ditampilkan lewat views.py</h3>""""
}
tpl = loader.get_template('template.html')
ctx = Context({
'html_statis':statis,
})
return HttpResponse(tpl.render(ctx))
Sedangkan untuk kode template.html kita buat seperti ini :
#template.html
{% extends "base.html" %}
{% block statis %}
{% if html_statis %}
{{ statis.content }}
{% endif %}
{% endblock %}
Ternyata simpel dan mudah, tanpa perlu modul macam-macam tapi herannya para 'master' di komunitas 'id-python' kenapa tidak memberikan 'teknik' ini ya ? Kebanyakan mereka hanya menyodorkan link-link dokumentasi Django hingga saya bingung sendiri.
1 comment:
Tulisan ini telah mengalami beberapa kali revisi
Post a Comment