យើង​បាន​ដឹង​រួច​មក​ហើយ​ថា កញ្ចប់ Bottle ប្រើប្រាស់​ភាសា SimpleTemplate Engine (STPL) សំរាប់​សរសេរ​រៀបចំ​បង្កើត​ទំរង់​ទំព័រ HTML ទាំងឡាយ ដែល​មាន​ប្រភេទ​ជា​ឯកសារ tpl មុន​នឹង​យក​ឯកសារ​ទាំងនោះ​ទៅ​បញ្ចូល​ទិន្នន័យ​និង render អោយ​ក្លាយ​ទៅ​ជា​ទំព័រ HML យ៉ាងពិត​ប្រាកដ ដើម្បី​បញ្ជូន​ទៅ​អោយ​ browser ។ លើស​ពី​នេះ​ទៀត កញ្ចប់ Bottle ក៏​អនុញ្ញាត​អោយ​យើង​អាច​ប្រើប្រាស់​ភាសា​ផ្សេង​ៗ​ទៀត​បាន​ដែរ តាម​រយៈ plugin ។

 

ជាទូទៅ ភាសា STPL គឺ​ជា​ភាសា Python ដែល​ត្រូវ​បាន​យក​ទៅ​កែតំរូវ​សំរាប់​ជា​ជំនួយ​ក្នុង​ការសរសេរកូដ​ជា​ភាសា HTML ។ ដូចនេះ សំរាប់​អ្នក​ចេះ​ភាសា Python គឺ​គ្មាន​រឿង​អ្វី​ពិបាក​ឡើយ ក្នុងការប្រើប្រាស់​ភាសា STPL សំរាប់​សរសេរ​តាក់តែង​ទំរង់​នៃ​ឯកសារ​ HTML ។

 

ដំបូង​បង្អស់ នៅ​ក្នុង​ភាសា STPL គ្រប់ expression ទាំងអស់​ត្រូវ​ស្ថិត​នៅ​ក្នុង​សញ្ញា {{ }} ។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ៖

 

#main.py
from bottle import route, run
from controllers import index
  
@route('/')
def main():
  kargs = {"siteTitle":"Khmer Web", "message":"Web programming in Python!"}
  return index.render(**kargs)
  
run(host='localhost', port=9000, debug=True, reloader=True)

 

#\controllers\index.py
from bottle import template
 
def render(**kargs):
  return template('index', data=kargs)

 

<!--c:\bottle\views\index.tpl-->
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>{{data['siteTitle']}}</title>
  </head>
   
  <body>
    <h1>{{data['message']}}</h1>
  </body>
</html>

 

ដោយ​ហេតុថា STPL ជា​ template language អាស្រ័យ​ហេតុ​នេះ យើង​អាច​ប្រើប្រាស់​ភាសា Python លាយ​ឡំ​ជាមួយ​នឹង​ភាសា HTML បាន ដោយ​គ្រាន់តែដាក់សញ្ញា % នៅ​ដើម​បន្ទាត់​ដែល​ជា​ភាសា Python និង​ឬ​ប្រើប្រាស់​សញ្ញា <% %> សំរាប់​ខ័ណ្ណ​ចែក block ជា​ភាសា Python ។

 

% name = "Bob"  # a line of python code
<p>Some plain text in between</p>
<%
  # A block of python code
  name = name.title().strip()
%>
<p>More plain text</p>

 

លើស​ពី​នេះ​ទៀត statement នៅ​ក្នុង​ភាសា STPL ត្រូវ​បញ្ចប់​ទៅ​ដោយ​ពាក្យ​ថា end ហើយ identation គ្មាន​ឥទ្ធិពល​អ្វី​ឡើយ​។

 

<%
    if some_condition:
        some_operation()
    elif some_other_condition:
        some_other_operation()
    else:
        yet_another_operation()
        if yet_another_condition:
          some_more_stuff()
        end
    end
%>