使用Plone Add-on包含Python脚本

时间:2011-06-01 17:36:33

标签: python scripting plone add-on

我有一个Plone Add-on(通过Zope创建),包括Javascript和页面模板文件。一些Javascript函数需要调用Python脚本(通过AJAX调用) - 如何在不通过ZMI的情况下将这些Python脚本包含在我的附加组件中?

我有一个“browser”文件夹,其中包含一个“configure.zcml”文件 - 注册资源目录和我的模板文件。我会假设注册python文件会与此类似,或类似于Javascript文件的注册方式,但也许不是?

1 个答案:

答案 0 :(得分:7)

您将python注册为内容对象上的Views:

<browser:page
 for="**INTERFACE**"
 name="**name**"
 class="**class**"
 attribute="**method**"
 permission="zope2.View"
 />

INTERFACE 是您想要查看的对象的界面, 名称是视图名称(即http://path-to-object/@@name), 是定义脚本的Python类,属性是类的可选方法(默认为 __ 调用 __ )。严格来说,我认为 class 是任何可调用的,不一定是类的方法。

这是我用于kss操作的脚本(与编写自己的AJAX脚本几乎相同) - 您的类可能需要从BrowserView继承(PloneKSSView是KSS视图的专用):

<browser:page
 for="Products.VirtualDataCentre.interfaces.IDDCode"
 name="getTableColumns"
 class="Products.VirtualDataCentre.browser.DDActions.DDActions"
 attribute="getTableColumns"
 permission="zope2.View"
 />

其中 IDDCode 是我需要该视图的内容类型, DDActions.py 包含:

from Products.Five import BrowserView
from plone.app.kss.plonekssview import PloneKSSView
class DDActions(PloneKSSView):
    def getTableColumns(self, table, currValue, currLabel):
        columns = self.context.getColumnNames(table)
        for (field, curr) in [('valueColumn', currValue), ('labelColumn',currLabel)]:
            self.replaceSelect(field, columns, (curr or self.context[field]))