[Python] [Zope] TAL の使い方

XML を色々な理由で使いたいけど DOM とか XPath とか XSLT とかカオスすぎてイミワカンネ
なんで XML で全部やらなきゃいけないんだ。手元に Python があるんだからこれを使えばいい

テンプレートを呼び出す

TAL の文法とかどっかで確認してください。Zope3 の話なので多少違うけど。

from zope.pagetemplate.pagetemplatefile import PageTemplateFile
template = PageTemplateFile('template.xml')
print template(*args, **options)

PageTemplateFile.__call__ に渡した引数は args と options という名前でテンプレート内から参照できます。

テンプレートから参照できる変数を増やす

初期状態では

しか変数が用意されていません。好き勝手に変数を追加する話。

from zope.pagetemplate.pagetemplatefile import PageTemplateFile

class PageTemplateFile(PageTemplateFile):

    def __init__(self, filename, _prefix=None):
        self.namespace = {}
        super(PageTemplateFile, self).__init__(filename, _prefix=None)

    def pt_getContext(self, *args, **kwargs):

        context = super(PageTemplateFile, self).pt_getContext(*args, **kwargs)

        if self.namespace:
            context.update(self.namespace)

        return context

TALES 拡張

前に書いてたな。id:chrono-meter:20060415

ZCML で設定書けないときは次のようにして登録する。

from zope.pagetemplate.pagetemplatefile import PageTemplateFile

class PageTemplateFile(PageTemplateFile):

    def pt_getEngine(self):
        engine = super(PageTemplateFile, self).pt_getEngine()

        if 'hoge' not in engine.getTypes():
            engine.registerType('hoge', HogeExprHandlerFactory)

        return engine

詳しくは zope.pagetemplate.pagetemplate へ