当我使用#include (没有raw)包含一个文件时,它会正确地解析内容,但是我想在原始文件中访问的#def不存在&抛出一个错误。
基本模板:
#def sayHello($name)
hello $name
#end def模板:
#include "../../BaseTemplate.template"
$sayHello("fred")发布于 2011-12-01 06:03:15
发生这种情况的原因是,sayHello是一个添加到“基本模板”(实际上是一个类)的函数,但您不能在调用模板中访问它。
我不确定解决您遇到的问题的最佳方法,但我相信您可以在def行之前使用#@staticmethod使defHello成为一个静态方法,然后导入模板而不是包含它。
This page有更多信息。
发布于 2012-04-05 06:43:59
好的,看起来你可以通过这个属性来实现:
self._CHEETAH__cheetahIncludes这是一个包含所有包含内容的字典。
在您的模板中,在include like之后使用它:
$self._CHEETAH__cheetahIncludes[include_id].the_function(*args)对我来说,include_id恰好是文件路径(我是通过先打印出_CHEETAH__cheetahIncludes字典找到这个路径的)。这是有保证的吗?不知道。
我推荐这个吗?不是的。有没有更好的方法来访问这个函数?看起来不是。有什么缺点吗?不知道,使用风险自负。这会对某些人有用吗?也许:)
我的意思是,这可能是一个有用的功能,因为人们正在尝试这样做,但这个功能是必要的吗?可能不会。
我的用例是我想要重用一个代码片段,它可以像includes一样访问父searchList,但我想在其他模板中重用这个include和一个硬编码的参数。首先,我可以很容易地创建这个变量来更改searchList的行为部分,这可能也是您应该做的:)。这也允许我从应用层传递它,而不是在我的模板中硬编码它!
这很可能是一个好的设计,因为它防止了我们开发人员经常采取的短板,如果允许这样做很容易的话。
https://stackoverflow.com/questions/6129996
复制相似问题