是否可以使用带有函数的= LOAD(...)而不是控制器/函数字符串
e.g:
Controller:
def test():
print "test"
def index():
return dict(test=test)
查看:
{{=LOAD(test, ajax=True)}}
而不是:
查看:
{{=LOAD('controller', 'test', ajax=True)}}
主要原因是,我想使用无法以这种方式访问的lambda / generated函数。
答案 0 :(得分:4)
没有。但不是因为语法不受支持,因为它在逻辑上是不可能的:LOAD()在与执行lambda的http请求不同的http请求中执行,因此后者将是未定义的。而且为了执行ajax回调,被调用的函数必须有一个名字,不能是一个lambda。我们可以创建一个缓存的创造性使用,以便LOAD将lambda存储在缓存中:
def callback():
""" a generic callback """
return cache.ram(request.args(0),lambda:None,None)(**request.vars)
def LOAD2(f,vars={}):
""" a new load function """
import uuid
u = str(uuid.uuid4())
cache.ram(u,lambda f=f:f,0)
return LOAD(request.controller,'callback',args=u,vars=vars,ajax=True)
def index():
""" example of usage """
a = LOAD2(lambda:'hello world')
return dict(a=a)
但这只适用于cache.ram,需要定期缓存清理。