Plone 4: Получение значений словаря в цикле - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь получить Именованный словарь и просмотреть его содержимое.Ниже приведен код, который у меня есть.

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:

В чем может быть проблема?Как получить названный словарь и просмотреть значения?Я использовал эту ссылку .

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

В вашем цикле «термины» на самом деле строка, соответствующая ключу словаря. Попробуйте это:

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

Здесь значение - это строка ключа, а термин - объект SimpleVocabularyTerm.

Примечание: при обращении за помощью о модульных системах, таких как Plone, всегда полезно указывать любые надстройки, связанные с этой проблемой .. (здесь, в частности, Products.ATVocabularyManager)

2 голосов
/ 29 февраля 2012

Я нашел другой способ заставить его работать.Ниже приведен код.

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

Спасибо всем ребятам, которые предложили ответить на мой вопрос.

0 голосов
/ 28 февраля 2012

Вы должны звонить term вместо terms внутри цикла.Также, если terms.value имеет тип int, вы должны окружить его str().Попробуйте это:

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