2011-06-06 64 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