我在Plone 4.3.3中使用PloneFormGen 1.7.12。我有一个包含大约20个名字的大型选择字段。这是必需的。如果用户选择其中一个名称,则应将其发送到Plone Page模板,该模板具有相关说明。如果它选择任何其他页面,它应该向用户发送包含其表单结果的电子邮件,并将其带到感谢页面。
我试过用python脚本做这个,但我正在做的事情不起作用。脚本中的代码是:
REDIRECT = context.REQUEST.RESPONSE.redirect
URL=context.REQUEST.URL1 + '/'
FORM=context.REQUEST.form
school_name = context.REQUEST.form['school_name']
member = context.portal_membership.getAuthenticatedMember()
roles=member.getRolesInContext(context)
if school_name <> "Other-School not Listed":
return False
else:
return REDIRECT(URL + 'not_listed')
我在自定义表单操作覆盖中放置了python:here.school_redirect(),但是URL显示:
蟒:here.school_redirect()
,页面显示&#34;地址未被理解&#34;
school_redirect是python脚本的id not_listed是Plone页面模板的id school_name是选择字段的id
非常感谢任何建议。
Joe Bigler
答案 0 :(得分:1)
Custom Form Action
是一个简单的StringField,没有TALES表达式字段。
这意味着您可以将./school_redirect
添加到Custom Form Action
,但是您还有其他问题,例如返回False
将无效,您仍需要重定向。您还绕过了所有验证器和成功处理程序。
所以imho的另一种方法可能会更好:
<强> 1。覆盖成功处理程序
FormFolder上的 Custom Success Action
字段。您可以添加单个表达式或python脚本,它返回正确的值。
字段说明:
使用此字段代替感谢页面指定以确定调用动作适配器后的最终操作(如果有)。您通常将此用于自定义成功模板或脚本。如果不需要,请留空。否则,请指定CMFFormController操作类型和参数,以及要执行的操作类型(例如,&#34; redirect_to&#34;或&#34; traverse_to&#34;)和TALES表达式。例如,&#34; redirect_to:string:thanks-page&#34;将重定向到&#39; thanks-page&#39;。
您的./school_redirect
只需要很小的更改即可适应此解决方案。不要重定向自己,只需返回正确的id(页面模板/视图/等)。
<强> 2。请勿触发邮件适配器
为此,Mail-Adapter提供了一个名为Execution Condition
的字段。
将评估TALES表达式以确定是否执行此操作。如果不需要,请留空,然后执行操作。你的表达式应该作为布尔值计算;如果您希望执行操作,则返回True。请注意:评估此表达式中的错误将导致表单显示错误。
添加一个脚本或表达式,用于评估是否需要触发电子邮件。
您可以重复使用./school_redirect
脚本来撰写表达式:python: here.school_redirect() != 'not_listed'