当我使用#include(不带raw)包含一个文件时,它会正确解析内容,但我想在原始文件中访问的#def 不存在并且会引发错误。
基本模板:
#def sayHello($name)
hello $name
#end def
模板:
#include "../../BaseTemplate.template"
$sayHello("fred")
发生这种情况的原因是sayHello
添加到“基本模板”(实际上是一个类)的函数,但您无法在调用模板中访问它。
我不确定解决您遇到的问题的最佳方法,但我相信您可以在行前创建defHello
一个静态方法,然后导入模板而不是包含它。#@staticmethod
def
此页面有更多信息。
好吧,看起来你可以通过属性做到这一点:
self._CHEETAH__cheetahIncludes
这是一本包含所有包含内容的字典。
在包含后从您的模板中使用它,例如:
$self._CHEETAH__cheetahIncludes[include_id].the_function(*args)
对我来说,include_id
恰好是文件路径(我是通过先打印_CHEETAH__cheetahIncludes
字典发现的,呵呵)。这是有保证的吗?不知道。
我推荐这个吗?没有。有没有更好的方法来访问该功能?似乎不是。有什么缺点吗?不知道,使用风险自负。这对某人有用吗?也许 :)
我的意思是它可能是一个有用的功能,因为人们正在尝试这样做,但这个功能是否必要?可能不是。
我的用例是我想重用一个片段,它可以像包含一样访问父搜索列表,但我想在其他模板中重用这个包含一个硬编码参数。 我可以很容易地使这个变量首先改变 searchList 的行为部分,这可能也是你应该做的:)。这也将允许我从应用程序层传递它,而不是在我的模板中硬编码它!
这很可能是一个很好的设计,因为它可以防止我们开发人员经常采取的短线削减,如果允许这样做的话。