TALES表达式比较Plone中的数字输入?

时间:2012-07-30 10:51:19

标签: plone zope ploneformgen

TALES表达对我来说是新的。我可以得到一些很好的参考吗?实际上我希望使用ploneformgen为数字输入字段定义内容规则。类似的东西:

python: request.form.get('amt', False) <= 5000     

然后应用规则。

此处'amt'是输入表单上的数字/整数字段。

2 个答案:

答案 0 :(得分:3)

作为参考,您应该查看官方TALES specification,或参阅TALES section of the Zope Page Templates reference

在这种情况下,您使用的是普通的python表达式,因此适用于python代码的常规规则。

表达式request.form.get('amt',False)将从请求返回请求参数'amt',如果缺少,则返回布尔值False,然后将其与之比较整数值。

该表达式有两个错误:首先,您假设'amt'参数是一个整数值。但是,即使PFG整数字段仍然是请求对象中的字符串。因此,在比较它之前,您需要先转换为整数。

此外,你回归到一个布尔值,在整数比较中,它将被视为0的等价物,最好是明确的并使用它:

python: int(request.form.get('amt', 0)) <= 5000

请注意,对于PFG条件,您还可以返回字符串错误消息,而不是布尔值True:

python: int(request.form.get('amt', 0)) <= 5000 or 'Amount must be not be greater than 5000'

答案 1 :(得分:1)

如果未在应用程序级别定义表单参数,则表单参数通常以字符串形式传递,例如

Zope将使用fieldname amt:int来将值转换为整数。

所以你可能想尝试在第一个表达式周围加一个int(....)。