テンプレート内からファイルを挿入する

JavaScript のファイルなどを TAL で処理せずに挿入する際に使用する。
ファイル名には絶対パス相対パスも使用可能。

  • implements.py
from zope.tales.expressions import StringExpr
from zope.app.exception.interfaces import UserError
from os import path

class FileNotFound(UserError):
	"""File not found."""

class TALIncludeFileExpr(StringExpr):
	"""Include File Expression Handler class"""

	def __call__(self, econtext):
		fname = path.join(path.split(econtext.source_file)[0], self._expr)
		try:
			fp = open(fname, 'rb')
		except IOError:
			raise FileNotFound, 'Can\'t find file <%s>.' % (self._expr, )
		result = fp.read()
		fp.close()
		return result
  • configure.zcml
<tales:expressiontype
	name="file"
	handler=".implements.TALIncludeFileExpr"
	/>
  • 使用例
<script type="text/javascript" tal:content="structure file:prototype.js" />