いわゆる include みたいなのがなかったので。
context/request/view/template などは継承されるが、tal:define/tal:repeat で設定した変数は継承されない。
context/request ゃ tal:define で設定した変数は使用できる。
ファイル名には絶対パスも相対パスも使用可能。
- implements.py
from zope.tales.expressions import StringExpr from os import path from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile class IncludedPageTemplate(ViewPageTemplateFile): __parent__ = None def setParent(self, parent): self.__parent__ = parent def pt_getContext(self, **_kw): namespace = super(IncludedPageTemplate, self).pt_getContext(**_kw) namespace.update(self.__parent__.contexts) namespace.update(self.__parent__.vars) return namespace class TALIncludeTemplateExpr(StringExpr): def __call__(self, econtext): t = IncludedPageTemplate(path.join(path.split(econtext.source_file)[0], self._expr)) t.setParent(econtext) return t(econtext.contexts['view'])
- configure.zcml
<tales:expressiontype name="include" handler=".implements.TALIncludeTemplateExpr" />
- 使用例
<div tal:content="structure include:content.pt" />