Python-скрипт в Zope не может найти имя функции во внешнем методе

У меня проблема с получением скрипта Python в Plone для поиска внешнего метода. Дано три разных объекта:

  1. Внешний метод называется CloneList (Идентификатор и имя функции)
  2. Документ DTML, который успешно ссылается на него, используя этот

    <dtml-var "CloneList(PAGE,ORG,STATUS,CGAP_DATA_HOME,BASE)">
    
  3. Скрипт Python, который ссылается на внешний метод через это...

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

Документ DTML работает нормально, но скрипт Python по какой-то причине выдает:

Error Value: global name 'CloneList' is not defined

Почему шаблон DTML прекрасно видит CloneList, а скрипт Python - нет?

1 ответ

Решение

Пространство имен DTML включает текущий контекст, а пространство имен Python Script - нет. Код Python должен использовать явные методы для ссылки на другие объекты вне скрипта.

Вы можете использовать context объект для ссылки на другие объекты в ZODB, например, внешний метод:

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

Вы также можете посмотреть имя на container; где context использует цепочку приобретения для поиска имен, container только смотрит на папку, в которой находится скрипт, плюс все родительские папки.

Другие вопросы по тегам