2012-02-28 71 views
0

我正在嘗試獲取一個命名詞彙表並通過其內容進行循環。以下是我到目前爲止的代碼。Plone 4:在一個循環中獲取詞彙表值

def get_car_types(self): 

    car_types = [] 

    vtool = getToolByName(self, 'portal_vocabularies') 
    cars_vocab = vtool.getVocabularyByName('my.package.car_models') 

    for terms in cars_vocab: 
     print terms.value + ": " + terms.title 

我得到以下錯誤:

AttributeError: 'int' object has no attribute 'startswith' 

,指出錯誤是圍繞這條線的地方:

for terms in cars_vocab: 

可能是什麼問題呢?如何獲取指定詞彙並循環訪問值?我一直在使用this link

+0

您可以在for循環之前執行打印cars_vocab,打印類型(cars_vocab)並返回該附加信息嗎? – Bogdan 2012-02-28 12:57:46

+0

@Bogdan這是我得到的:2012-02-28 16:00:33信息my.product.browser Frankline 2012-02-28 13:02:42

+1

當您報告錯誤時,請包括完整的回溯,而不僅僅是例外。這樣我們可以確定問題出現在哪裏。 – 2012-02-29 11:41:39

回答

2

當我想通了另一種方法,使之工作。以下是代碼。

from Products.ATVocabularyManager import NamedVocabulary 

def get_car_types(self):   

     car_types = []   
     car_vocab = NamedVocabulary('my.package.car_models') 
     car_terms = car_vocab.getDisplayList(self).items() 

     for term in car_terms: 
      car_types.append((term[0], term[1])) 

     return car_types 

感謝所有提出回答我的問題的人。

-1

您應該在迴路內呼叫term而不是terms。此外,如果terms.valueint類型,則應該用str()包圍它。試試這個:

print str(term.value) + ": " + str(term.title) 
+0

它沒有達到這一線。閱讀我上面的問題。該錯誤位於for循環開始的行中。 – Frankline 2012-02-28 13:04:27

+0

謝謝。我已經更正了上面的問題。但仍然沒有解決我的問題。 :-( – Frankline 2012-02-28 13:27:27

+0

你怎麼得出結論:'startswith'上的AttributeError是由於int被附加到字符串引起的? – 2012-02-29 11:44:52

2

在你的循環中「terms」實際上是字典對應的字符串鍵。 試試這個:

for value,term in cars_vocab.items(): 
     print value + ": " + term.title 

這裏值是關鍵字符串和期限是SimpleVocabularyTerm對象。

注:詢問關於模塊化系統一樣的Plone這是好事,始終指定參與該問題的任何附加組件的幫助。(這裏值得注意的是Products.ATVocabularyManager)