2012-03-07 4 views
1

Используя объекты zope и request, иногда я получаю разные типы в моей переменной. Мне нужно это объяснить:Объекты запроса на литье в zope массиве

docs = request.form['ID'] 

Иногда Документы один идентификатор (и это строка), другие элементы, это несколько записей, и является массивом. Это может быть очень запутанным, потому что строки также можно исправить.

if isinstance(docs, basestring): 
    docs = [docs] 

for doc_id in docs: 
    dosomething(doc_id) 

Это работает, но только если переменные, входящие в строку, являются строками.

Каков наилучший способ справиться с типами запросов, которые меняются? Возможно, в моем случае я хочу только использовать типы, которые являются итерабельными (и неправильными), и бросать ошибки на остальных?

ответ

1

Zope поддерживает преобразование типа из-из-коробки, в том числе преобразования списка:

<input type="checkbox" name="items:list" value="foo" /> Foo<br/> 
<input type="checkbox" name="items:list" value="bar" /> Bar<br/> 

Если пользователь был проверить один или два из указанных выше пунктов, в результате items записи в запросе будет список, независимо от количества элементов в списке:

# No typechecking needed, this is a list: 
items = request.form['items'] 

в приведенном выше примере, я использовал постфикс :list для достижения этой цели. Дополнительную информацию см. На странице Argument Conversion section of the Object Publishing chapter of the Zope dev book.

 Смежные вопросы

  • Нет связанных вопросов^_^