TALES表达对我来说是新的。我可以得到一些相同的好参考吗?实际上,我希望使用ploneformgen为数字输入字段定义内容规则。例如:TALES表达式来比较Plone中的数字输入吗?
python: request.form.get('amt', False) <= 5000
然后应用规则。
这里'amt'是输入表单上的数字/整数字段。
TALES表达对我来说是新的。我可以得到一些相同的好参考吗?实际上,我希望使用ploneformgen为数字输入字段定义内容规则。例如:TALES表达式来比较Plone中的数字输入吗?
python: request.form.get('amt', False) <= 5000
然后应用规则。
这里'amt'是输入表单上的数字/整数字段。
作为参考,你应该看官方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'
通常形式参数是作为字符串传递的,如果它们没有在应用程序级别定义的话,例如,
Zope会罩下使用的字段名AMT:整数,以将值转换为整数。
所以你可能想尝试在第一个表达式中放置一个int(....)。
@SteveM:谢谢你的建议。 :-)尽管如此,更好地使用评论,正如你注意到改变答案在SO上不受欢迎,但无论如何都是正确的。 – 2012-07-30 15:40:22
Thanx寻求帮助。但我真正想要做的是取决于输入的int值,如果它<= 5000,想要将保存的数据条目移动到folder1。如果输入的int值大于5000,则将其移至folder2。我尝试了上述表达式,但无法解决。 Tried int('5000'),也是python:int(request.form.get('amt',0))<= 5000 – user956424 2012-07-31 06:10:58
也许这不是错误的情况。你有没有尝试过用'python:True'和'python:False'来测试它? – 2012-07-31 07:42:43