カテゴリー
Uncategorized

[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 という名前でテンプレート内から参照できます。

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

初期状態では

  • 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 へ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です