我有一个带有视图类的页面模板。在页面模板中,我有一个提交到同一页面的按钮,即
<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
在页面模板的视图类中调用我的方法(即)?