2012-03-07 63 views
1

使用zope和請求對象時,有時會在變量中獲得不同的類型。我需要考慮到這一點:將zope中的請求對象轉換爲數組

docs = request.form['ID'] 

有時Docs是一個ID(是一個字符串),其他項目是幾個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