2011-06-06 74 views
1

在我的Zope实例中,我有一个注册为浏览器页面的Python脚本。我有以下的代码作为其注册地:将参数传递给Zope浏览器页面

<browser:page name="test" for="*" permission="zope2.Public" class="browser.test.PyTest" attribute="CallPy" />

此功能, “PyTest.CallPy” 被定义为:

def CallPy(self, data): ...

然后我用JavaScript来调用函数,传递数据在:

$.ajax({ url: "@@test", data: ({data: "mydata"}), dataType: "text", success: ..., error: ... });

然而,当我拨打这个电话,我得到一个错误,指出“CallPy()只需要2个参数(给出1)”。

如何将此函数注册为在调用该数据时传入此数据的页面?

回答

3

你错过了很多关于你的方法的细节。这是一种班级的方法吗?还是独立的?通常,self将涉及类别的实例PyTest - 这将是BrowserView的子类。

然后,传递到视图中的数据(@@测试)从请求对象,这是在self.request获取(具体地可用的,在这种情况下,self.request获取检索。 form.data)(所以,你没有为方法指定'data'参数)。

嗯。我不认为你需要在字典中的括号:data: ({data: "mydata"})

+0

括号在JavaScript代码中,在这种情况下没有任何区别。 Zope将解组请求参数并将它们与方法签名匹配,所以如果所有设置都正确,CallPy应该从GET请求中传递'data'参数。 – 2011-06-06 14:58:42

+0

另外,在Python脚本中,您可以像访问任何其他字典一样访问发送的数据:'self.request.form ['data']' – lightningmanic 2011-06-06 17:03:20