Wednesday, August 15, 2012

Templating CherryPy Dengan Jinja2

Bila ditulisan sebelumnya membahas tentang setting web server dan installasi CherryPy, sekarang saatnya membahas penggunaan template pada CherryPy dengan menggunakan Jinja2. Saya menggunakan Jinja karena formatnya sangat familiar dengan format template pada Django dan templating system pada Appengine.

Sebenarnya saya juga pernah menulis tentang penggunaan templating system pada CherryPy hanya saja ditulisan tersebut saya melakukan percobaan menggunakan fasilitas Google Appengine dengan contoh menggunakan templating system default milik Appengine.

Dengan keterbukaan framework CherryPy sebenarnya kita bisa menggunakan templating system yang lain selain Jinja, antara lain ZPT, Cheetah, Genshi dan lain-lain coba cek dokumentasi CherryPy yang berkaitan dengan templating pada CherryPy.

Installasi Jinja2

Silahkan unduh Jinja2 di http://pypi.python.org/pypi/Jinja2/. Sebelum Anda melakukan installasi Jinja pastikan di server Anda sudah terinstall setuptools, bila belum silahkan unduh di http://pypi.python.org/pypi/setuptools/. Berhubung saya menggunakan Slackware, untuk mempermudah proses instalasi saya menggunakan script SlackBuild yang bisa diunduh di http://slackbuilds.org/repository/13.37/python/pysetuptools/.

Install Jinja dengan perintah berikut :

# python setup.py install

Untuk mengetahui cara installasi, setting dan penggunaan API Jinja selengkapnya silahkan baca dokumentasinya di http://jinja.pocoo.org/docs/

Saatnya Mencoba

Buatlah file html yang akan kita jadikan template, misalnya dengan nama file test.html, seperti berikut ini :

<h1>
{# menggunakan dua variabel sekaligus dalam satu tag <h1>, variabel tes1 dan tes2 #}
{{ tes1 }} {{ tes2 }}
</h1>

Contoh Perulangan  :
<ul>
        {# memasukan value data list dari variabel tes3 ke instan 'no'  #}
        {% for no in tes3 %}
               <li>{{ no }}</li>
        {% endfor %}
</ul>

Sekarang kita akan membuat file handler atau file utama aplikasi CherryPy kita dengan nama file cherry.py (disini saya hanya memodifikasi contoh ditulisan sebelumnya saja dan simpan di folder tempat penyimpanan aplikasi CherryPy sesuai setting di web server silahkan baca tulisan sebelumnya), seperti berikut ini: 

import sys  
sys.stdout = sys.stderr 

import atexit 
import threading 
import cherrypy  
from jinja2 import Environment, FileSystemLoader

# mendefinisikan folder penyimpanan file template yang dibuat 
env = Environment(loader=FileSystemLoader('/var/www/htdocs/cherry'))  

cherrypy.config.update({'environment': 'embedded'}) 

if cherrypy.__version__.startswith('3.0') and cherrypy.engine.state==0: 
           cherrypy.engine.start(blocking=False)  
           atexit.register(cherrypy.engine.stop) 

class Root(object): 
          def index(self): 
                  tmpl = env.get_template('test.html') 
                  return tmpl.render(
                                                         tes1='Hello',  
                                                         tes2='World', 
                                                         # definisikan variabel dengan data bertipe list
                                                         tes3=['No. 1','No. 2','No. 3']
                   )
          index.exposed = True  

application = cherrypy.Application(Root(), script_name=None, config=None)

Nah, aplikasi sudah bisa di coba. Silahkan buka browser dan ketikan http://localhost/cherry/

No comments: