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 という名前でテンプレート内から参照できます。
テンプレートから参照できる変数を増やす
初期状態では
- template – PageTemplateFile のインスタンス
- options
- args
- nothing – None
- usage
しか変数が用意されていません。好き勝手に変数を追加する話。
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 へ