python – 处理Plone模板中的表单提交
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 处理Plone模板中的表单提交,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3080字,纯文字阅读大概需要5分钟。
内容图文
![python – 处理Plone模板中的表单提交](/upload/InfoBanner/zyjiaocheng/731/3375117e303c4392ab36bf16da3239d1.jpg)
我有一个带有视图类的页面模板.在页面模板中,我有一个提交到同一页面的按钮,即
<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)?
解决方法:
首先,对您的代码进行一些评论,可以简化和改进:
最佳做法是让您的表单使用视图的absolute_url()方法;它是规范的URL,而如果您的视图包含在其他地方,请求/ getURL可能包括获取奇怪或错误的URL:
<form method="post" tal:attributes="action view/absolute_url" >
<input type="hidden" name="filename" value="" tal:attributes="value item/filename" />
<input type="submit" name="form.action.convert" value="Convert" />
</form>
文件名输入框tal表达式只能使用路径表达式,这些对字典工作就好了.
您不需要重新定义__init__方法,BrowserView类已经为您提供了这个方法.
为了测试表单是否已提交,我们通常只测试请求中存在的提交按钮,您的测试比需要的更详细:
def __call__(self):
if 'form.action.convert' in self.request.form:
self.convert_document()
因为convert_document是您查看的方法,所以它本身可以访问self.context和self.request.form [‘filename’],从而简化您的方法签名.由于您现在知道您的表单已提交,因此您可以指望self.request.form [‘filename’]存在并成为字符串;如果不是某人已经手动修改请求并且事情应该破坏,所以我通常不会在这种情况下使用get(…,”).
视图必须始终在__call__方法中完成所有工作,因为在遍历期间调用__init__,此时此类关键信息尚未确定.您不需要通过上下文访问重定向方法的响应,只需从self.request属性访问它,但请记住返回结果:
return self.request.response.redirect(self.context.absolute_url())
但是,如果您的视图是上下文对象的默认视图,那么这确实会导致浏览器无法容忍的重定向循环.
请注意,如果您覆盖具有与之关联的模板的BrowserView视图类的__call__方法,则需要确保在适当的位置返回模板的输出.因此,我对你的观点课的刺激是:
class Html(BrowserView):
def __call__(self):
if 'form.action.convert' in self.request:
self.convert_document()
return self.request.response.redirect(self.context.absolute_url())
return self.index()
def convert_document(self):
""" Do something """
context = self.context
filename = self.request.form['filename']
# Do something with the context and filename
内容总结
以上是互联网集市为您收集整理的python – 处理Plone模板中的表单提交全部内容,希望文章能够帮你解决python – 处理Plone模板中的表单提交所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。