新的模版rendering引擎--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有機會更能被開發者所接受.