0

我正在尝试获取命名词汇并遍历其内容。以下是我到目前为止的代码。

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:

可能是什么问题呢?如何获取一个命名的词汇表并循环遍历这些值?我一直在使用这个链接

4

3 回答 3

2

在您的循环中,“术语”实际上是与字典键对应的字符串。试试这个:

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

这里的 value 是键字符串, term 是 SimpleVocabularyTerm 对象。

注意:在寻求有关 Plone 等模块化系统的帮助时,最好始终指定问题中涉及的任何附加组件..(这里特别是 Products.ATVocabularyManager)

于 2012-02-28T23:27:00.960 回答
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

感谢所有愿意回答我问题的人。

于 2012-02-29T12:40:52.247 回答
-1

您应该调用term而不是terms在循环内调用。此外,如果terms.value是类型int,您应该用str(). 试试这个:

print str(term.value) + ": " + str(term.title)
于 2012-02-28T12:58:00.303 回答