如何根据select变量中的值将PloneFormGen重定向到页面?

时间:2015-12-18 21:52:36

标签: python plone plone-4.x ploneformgen

我在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

1 个答案:

答案 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'