2010-10-13 44 views

回答

1

您可能需要一个custom validator。这里有一个简单的例子:

import formencode 

class CommaSepList(formencode.validators.FancyValidator): 

    def _to_python(self, value, state): 
     return value.split(",") 

    def validate_python(self, value, state): 
     for elem in value: 
      if elem == "": 
       raise formencode.Invalid("an element of the list is empty", value, state) 

>>> CommaSepList.to_python("1,2,3") 
['1', '2', '3'] 
>>> CommaSepList.to_python("1,,") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.5/site-packages/FormEncode-1.2.3dev-py2.5.egg/formencode/api.py", line 416, in to_python 
    vp(value, state) 
    File "myValidator.py", line 17, in validate_python 
    raise formencode.Invalid("an element of the list is empty", value, state) 

当然,你会想添加特定于你的用例的验证。

+0

这种方法通常在通过列表理解进行管理时最好。例如'[j for j in [i.strip()for i in value.split(“,”)] if j]' – 2015-08-25 16:33:15

0

假设每个字由一个逗号和空格(', ')分隔:

>>> x = "foo1, bar2, foo3" 
>>> x.split(', ') 
['foo1', 'bar2', 'foo3'] 

然后再传递到FormEncode该列表,并将它做什么你需要它来做。