Pylons formencode - 如何POST数据数组?

0 投票
1 回答
565 浏览
提问于 2025-04-16 02:27

我有一个表单,结构大概是这样的:

Enter Name:
Enter Age:
[add more]

这个表单可以添加更多的字段,点击后会复制“姓名”和“年龄”的输入框,用户可以根据需要点击很多次。理论上,他们可能会提交多达50组“姓名”和“年龄”的数据。

当这些数据提交到我的Pylons应用时,我该如何处理这些接收到的数据呢?我基本上需要做的事情是:

for name, age in postedform:
   print name + ' ' + age

我遇到了formencode的variabledecode函数,但我实在搞不懂该怎么用 :/

谢谢。

1 个回答

1

你可以像这样发送数据(当然要进行URL编码)

users-0.name=John
users-0.age=21
users-1.name=Mike
users-1.age=30
...

对用户从0到N进行处理,其中N是你拥有的用户数量,记得从0开始计数。然后,在Python这边,当你通过variabledecode处理完这些数据后,你会得到:

users = UserSchema.to_python(request.POST)
print users

# prints this:
{'Users': [{'name': 'John', 'age': '21'}, {'name': 'Mike', 'age': '30'}]}

这些值可能会因为你在数据结构中进行的验证而有所不同。为了得到你想要的结果,你接下来需要这样做:

for user in users.iteritems():
  print "{name} {age}".format(**user)

更新

如果你想在一个字典里嵌入一个列表,可以这样做:

users-0.name=John
users-0.age=21
users-0.hobbies-0=snorkeling
users-0.hobbies-1=billiards
users-1.name=Mike
...

接下来依此类推。这个模式基本上是重复的:{name-N}会嵌入列表中第N个位置的值,从0开始。确保它是从0开始,并且这些值是连续的。.表示一个属性的开始,这个属性可以是一个单一的值、一个列表或者一个字典。

这是关于如何使用formencode的Pylons特定文档,可以查看表6-3来获取示例。

撰写回答