2012-07-30 34 views
2

TALES表達對我來說是新的。我可以得到一些相同的好參考嗎?實際上,我希望使用ploneformgen爲數字輸入字段定義內容規則。例如:TALES表達式來比較Plone中的數字輸入嗎?

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

然後應用規則。

這裏'amt'是輸入表單上的數字/整數字段。

回答

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' 
+2

@SteveM:謝謝你的建議。 :-)儘管如此,更好地使用評論,正如你注意到改變答案在SO上不受歡迎,但無論如何都是正確的。 – 2012-07-30 15:40:22

+0

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

+0

也許這不是錯誤的情況。你有沒有嘗試過用'python:True'和'python:False'來測試它? – 2012-07-31 07:42:43

1

通常形式參數是作爲字符串傳遞的,如果它們沒有在應用程序級別定義的話,例如,

Zope會罩下使用的字段名AMT:整數,以將值轉換爲整數。

所以你可能想嘗試在第一個表達式中放置一個int(....)。