新的模版rendering引擎--chameleon

透過chameleon,讓模版開發更加強大

 

chameleon的文檔網址如下

https://chameleon.readthedocs.org/en/latest/index.html

chameleon會在plone5中成為預設的模版功能,不過在plone 4.3.2,已經測試成功,分享如下:

首先,安裝 five.pt, 這是介接chameleon及plone的模組

在buildout.cfg 中

eggs =
   five.pt

接著將其設定到模組內的configure.zcml

  <include package="five.pt" />

重新buildout再重開之後,就可以在pt檔中使用chameleon的強大功能了

一個Hello world的例子如下,在模版 pt檔中,使用下列語句

<?python
  varA = 'Hello'
  varB = 'world!'
  int_A = 0
  for i in range(5):
      int_A += 1
?>

<h1>${python:'%s %s' % (varA, varB)} </h1>
<div class=${varA}>Attributes setup</div>
<p>${int_A}</p>

很直觀的使用方法吧,不但能直接使用python語法,而且看起來還有點像php!

所有的python code, 都可以寫在<?python ... ?>之中.

包括 import 模組,都能不受限制的使用,即使是 import pdb; pdb.set_trace() 也沒有問題。

強調一點,如果因為pdb.set_trace()跳出到提示模式,self, context這些是不能用的,但是可以用 econtext['context'] 就可以了,(原因待確認)

<?python ?>區塊會在template的全域生效,但是也可以搭配TAL,產生區域變數的效果

來一個搭配TAL的使用例:

<div tal:repeat="item python:range(5)">
<?python
  from DateTime import DateTime
  datetime = DateTime()
?>
<p>${datetime}</p>
</div>

如上,每一次的datetime結果就不一樣了。

如果plone因為TAL讓開發者望之卻步,

或許,因為chameleon, plone有機會更能被開發者所接受.