【问题标题】:Pass arguments to Zope browser page将参数传递给 Zope 浏览器页面
【发布时间】:2011-06-06 14:29:38
【问题描述】:

在我的 Zope 实例中,我有一个 Python 脚本注册为浏览器页面。我有以下代码作为它的注册表:

<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 个)”。

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

【问题讨论】:

    标签: python parameter-passing zope


    【解决方案1】:

    您的方法缺少很多细节。它是一个类的方法吗?还是独立的?通常,self 将引用类 PyTest 的实例 - 这将是 BrowserView 的子类。

    然后,您传递给视图的数据 (@@test) 将从 Request 对象中检索,该对象在 self.request 中可用strong>(具体而言,在本例中为 self.request.form.data)(因此,您无需为方法指定“数据”参数)。

    嗯。我认为您不希望在 dict 周围加上括号:data: ({data: "mydata"})

    【讨论】:

    • 括号在 JavaScript 代码中,在这种情况下没有区别。 Zope 将取消编组请求参数并将它们与方法签名相匹配,因此如果一切设置正确,则应从 GET 请求中向 CallPy 传递一个“数据”参数。
    • 另外,在 Python 脚本中,您可以像访问任何其他字典一样访问发送的数据:self.request.form['data']
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多