2012-02-28 3 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

+0

@Bogdanこれは私が入手したものです:2012-02-28 16:00:33 INFO my.product.browser Frankline

+1

でエラーが報告されたら、完全なトレースバックを含めてください。例外。そうすれば、あなたの問題がどこにあるのかを突き止めることができます。 –

答えて

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

termsの代わりにtermを呼び出す必要があります。 terms.valueのタイプがintの場合は、str()で囲む必要があります。これを試してください:

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

その行に到達していません。上記の質問を読んでください。エラーはforループが始まる行にあります。 – Frankline

+0

ありがとうございます。私は上記の私の質問を修正しました。しかしまだそれは私の問題をまだ解決していません。 :-( – Frankline

+0

「Startswith」のAttributeErrorは、文字列にintが追加されているためと思われますか? –

2

あなたのループでは、「用語」は実際には辞書のキーに対応する文字列です。これを試してみてください :

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

値がキー文字列で、用語がSimpleVocabularyTermオブジェクトです。

注:Ploneのようなモジュラーシステムについて助けを求めたときに、常に問題に関わるすべてのアドオンを指定することが良い..です(ここでは特にProducts.ATVocabularyManager)

関連する問題