Zope中的Python脚本无法在外部方法中找到函数名称

时间:2015-03-19 14:49:51

标签: python plone zope dtml

我在使用Plone中的Python脚本找到外部方法时遇到问题。鉴于三个不同的对象:

  1. 名为CloneList的外部方法(Id和函数名称)
  2. 使用此

    成功引用它的DTML文档
    <dtml-var "CloneList(PAGE,ORG,STATUS,CGAP_DATA_HOME,BASE)">
    
  3. 通过此...引用外部方法的Python脚本

    return CloneList(PAGE,ORG,STATUS,CGAP_DATA_HOME,BASE)
    
  4. DTML文档工作正常,但Python脚本由于某种原因抛出:

    Error Value: global name 'CloneList' is not defined
    

    为什么DTML模板可以看到CloneList,但Python脚本不能?

1 个答案:

答案 0 :(得分:5)

DTML命名空间包含当前上下文,而Python Script命名空间则不包含。 Python代码必须使用显式方法来引用脚本之外的其他对象。

您可以使用context对象引用ZODB中的其他对象,例如外部方法:

return context.CloneList(PAGE, ORG, STATUS, CGAP_DATA_HOME, BASE)

您还可以在container上查找姓名;其中context使用获取链查找名称,container仅查看脚本所在的文件夹以及所有父文件夹。