我有一個帶有視圖類的頁面模板。在頁面模板,我有一個按鈕,提交到同一頁面即在Plone模板中處理表單提交
<form method="post" tal:attributes="action request/getURL" >
<input type="hidden" name="filename" value="" tal:attributes="value python:item['filename']" />
<input type="submit" name="form.action.convert" value="Convert" />
</form>
當表單提交時,視圖類被調用。現在
class Html(BrowserView):
def __init__(self, context, request):
self.request = request
self.context = context
def __call__(self):
# Is this a form submission via POST?
req = self.request
if req.get('REQUEST_METHOD', 'POST') and \
req.form.get('form.action.convert', '') == 'Convert':
self.convert_document(self.context, str(req.form.get('filename', '')))
def convert_document(self, contextObj, fileToConvert):
""" Do something """
return None
,問題是我不能把邏輯在__init__
方法,因爲這種方法被調用多次,導致只是一個單一的點擊多個表單提交。但是,單擊按鈕時會調用__call__
方法,但不幸的是,如果我單擊鏈接以查看視圖中的當前內容項,則不會發生任何事情,因爲__call__
方法被調用並且什麼都不會發生。
我不能使用__call__
方法中的以下代碼。瀏覽器會抱怨該頁面將以永不結束的方式重定向。
self.context.REQUEST.response.redirect(self.context.absolute_url())
在Plone的頁面模板中處理表單提交是否有更好的方式?如何在頁面模板的視圖類中調用我的方法(即convert_document
)?
謝謝你仔細分析我的代碼。只是說明我對Plone的瞭解還有多少。嬰兒的步驟。如果我只有一半的知識。關於你的答案,是的,它的工作很好。我失蹤了self.index() – Frankline