Pylons formencode - как разместить массив данных?

У меня есть форма, похожая на следующую:

Enter Name:
Enter Age:
[add more]

Это дополнительное поле копирует поля «Имя» и «Возраст», и на них можно нажимать столько раз, сколько захочет пользователь. Потенциально они могут в конечном итоге предоставить 50 наборов данных об имени и возрасте.

Как я могу обрабатывать полученные данные, когда они публикуются в моем приложении Pylons? Мне в основном нужно сделать что-то вроде:

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

Я столкнулся с функцией variabledecode formencode. Но не могу понять, как его использовать: /

Ваше здоровье.


person dave    schedule 07.08.2010    source источник


Ответы (1)


Вы бы опубликовали что-то вроде этого (конечно, в кодировке URL)

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

Сделайте это для пользователей 0-N, где N - это столько пользователей, сколько у вас, с нулевым индексом. Затем на стороне 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 и что значения являются последовательными. . начинает начало свойства, которое может быть скаляром, списком или словарем.

Это документация по Pylons по использованию formencode, см. Таблицу 6 -3 для примера.

person Jesse Dhillon    schedule 07.08.2010
comment
Это выглядит достаточно просто ... Я поиграю с этим и посмотрю, что произойдет. Спасибо. - person dave; 07.08.2010
comment
О, еще кое-что. Как я могу использовать этот метод для публикации массива в этом массиве? Скажем, наряду с именем и возрастом пользователь мог публиковать информацию о своих увлечениях. У них может быть X хобби ... Как бы вы это добавили? - person dave; 07.08.2010
comment
Я обновил ответ, чтобы дать вам пример того, как это сделать. - person Jesse Dhillon; 07.08.2010