ភាសា STPL

យើង​បាន​ដឹង​រួច​មក​ហើយ​ថា កញ្ចប់ 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)

<!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>
	

{{data['message']}}

</body> </html>

Web programming in Python!


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

Some plain text in between

<% # A block of python code name = name.title().strip() %>

More plain text

លើស​ពី​នេះ​ទៀត 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
%>