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

How do I redirect PloneFormGen to a page depending on the value in a select variable?

我在 Plone 4.3.3 中使用 PloneFormGen 1.7.12。我有一个很大的 selection 字段,其中包含大约 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 显示:

python:here.school_redirect()

页面显示"The address wasn't understood"

school_redirect是python脚本的id not_listed是Plone页面模板的id school_name是select字段的id

非常感谢任何建议。

乔比格勒

Custom Form Action是一个简单的StringField,没有TALES表达式字段。

这意味着您可以将 ./school_redirect 添加到 Custom Form Action,但是您遇到了其他问题,例如 returning False 将不起作用,您仍然需要重定向.您还可以绕过所有验证器和成功处理程序。

恕我直言,另一种方法可能更好:

1.覆盖成功处理程序

Custom Success Action FormFolder 上的字段。您可以添加单个表达式或 python 脚本,return 是正确的值。

字段说明:

Use this field in place of a thanks-page designation to determine final action after calling your action adapter (if you have one). You would usually use this for a custom success template or script. Leave empty if unneeded. Otherwise, specify as you would a CMFFormController action type and argument, complete with type of action to execute (e.g., "redirect_to" or "traverse_to") and a TALES expression. For example, "redirect_to:string:thanks-page" would redirect to 'thanks-page'.

您的 ./school_redirect 只需稍作改动即可适应此解决方案。不要重定向自己,只需 return 正确的 ID(页面 template/view/etc。)

2。不触发邮件适配器

为此,邮件适配器提供了一个名为 Execution Condition 的字段。

A TALES expression that will be evaluated to determine whether or not to execute this action. Leave empty if unneeded, and the action will be executed. Your expression should evaluate as a boolean; return True if you wish the action to execute. PLEASE NOTE: errors in the evaluation of this expression will cause an error on form display.

添加脚本或表达式,评估是否需要触发电子邮件。

您可以重复使用 ./school_redirect 脚本来编写表达式:python: here.school_redirect() != 'not_listed'