ビュー クラスを持つページ テンプレートがあります。ページテンプレートには、同じページに送信するボタンがあります。
<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__
ここでの問題は、このメソッドが複数回呼び出され、1 回のクリックで複数のフォームが送信されるため、メソッドにロジックを配置できないことです。ただし、__call__
ボタンをクリックするとメソッドが 1 回呼び出されますが、残念ながら、リンクをクリックして現在のコンテンツ アイテムをビューに表示しても、__call__
メソッドが呼び出されても何も起こらないため、何も起こりません。
__call__
メソッドで以下のコードを使用できません。ブラウザーは、ページが決して終わらない方法でリダイレクトされていると文句を言います。
self.context.REQUEST.response.redirect( self.context.absolute_url() )
Ploneのページテンプレートでフォーム送信を処理するより良い方法はありますか? convert_document
ページ テンプレートからビュー クラスのメソッド (つまり ) を呼び出すにはどうすればよいですか?