Python Zope 中的脚本无法在外部方法中找到函数名称
Python script in Zope can't find function name in external method
我在 Plone 中获取 Python 脚本以查找外部方法时遇到问题。给定三个不同的对象:
- 一个名为
CloneList
的外部方法(Id 和函数名称)
使用此
成功引用它的 DTML 文档
<dtml-var "CloneList(PAGE,ORG,STATUS,CGAP_DATA_HOME,BASE)">
通过此引用外部方法的Python脚本...
return CloneList(PAGE,ORG,STATUS,CGAP_DATA_HOME,BASE)
DTML 文档工作正常,但 Python 脚本由于某种原因抛出:
Error Value: global name 'CloneList' is not defined
为什么 DTML 模板可以很好地看到 CloneList 而 Python 脚本却不能?
DTML 命名空间包含当前上下文,Python 脚本命名空间不包含。 Python 代码必须使用显式方法来引用脚本之外的其他对象。
您可以使用 context
对象来引用 ZODB 中的其他对象,例如外部方法:
return context.CloneList(PAGE, ORG, STATUS, CGAP_DATA_HOME, BASE)
你也可以在container
上查名字;其中 context
使用获取链查找名称,container
仅查看脚本所在的文件夹以及所有父文件夹。
我在 Plone 中获取 Python 脚本以查找外部方法时遇到问题。给定三个不同的对象:
- 一个名为
CloneList
的外部方法(Id 和函数名称) 使用此
成功引用它的 DTML 文档<dtml-var "CloneList(PAGE,ORG,STATUS,CGAP_DATA_HOME,BASE)">
通过此引用外部方法的Python脚本...
return CloneList(PAGE,ORG,STATUS,CGAP_DATA_HOME,BASE)
DTML 文档工作正常,但 Python 脚本由于某种原因抛出:
Error Value: global name 'CloneList' is not defined
为什么 DTML 模板可以很好地看到 CloneList 而 Python 脚本却不能?
DTML 命名空间包含当前上下文,Python 脚本命名空间不包含。 Python 代码必须使用显式方法来引用脚本之外的其他对象。
您可以使用 context
对象来引用 ZODB 中的其他对象,例如外部方法:
return context.CloneList(PAGE, ORG, STATUS, CGAP_DATA_HOME, BASE)
你也可以在container
上查名字;其中 context
使用获取链查找名称,container
仅查看脚本所在的文件夹以及所有父文件夹。