カテゴリー
Uncategorized

テンプレート内から別のテンプレートを読み込む

いわゆる 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" />

コメントを残す

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