2012-02-12 8 views
0

Я хочу, чтобы мой пользовательский тип отображал заголовок сохраненного словаря. Определение поля выглядит следующим образом:Как отобразить словарный запас в архетипах?

atapi.LinesField(
    'member_field', 
    searchable=1, 
    index='KeywordIndex', 
    multiValued=1, 
    storage=atapi.AnnotationStorage(), 
    vocabulary_factory='member_name', 
    widget=AutocompleteWidget(
     label=_(u"Member Name"), 
     description=_(u"Multiple Lines, One Per Line."), 
     actb_timeout=-1, 
     actb_expand_onfocus=0, 
     actb_filter_bogus=0, 
    ), 
    enforceVocabulary=0, 
), 

определение словаря выглядит следующим образом:

class member_name(object): 
    implements(IVocabularyFactory) 
    def __call__(self, context=None): 
     items = (
      SimpleTerm(value='john', title=u'John Doe'), 
      SimpleTerm(value='paul', title=u'Paul Smith'), 
      ... ... 
     ) 
     return SimpleVocabulary(items) 
member_nameFactory = member_name() 

соответствующий шаблон страницы выглядит следующим образом:

<div tal:define="mbrs context/member_field|nothing" 
    tal:condition="mbrs"> 
Member List: 
<span tal:repeat="mbr mbrs"> 
    <span tal:replace="mbr">Member Name</span> 
    <span class="separator" 
    tal:condition="not: repeat/mbr/end" tal:replace="string:, " /> 
</span> 
</div> 

В этом примере результат, показывающий только значения, выглядит : Member List: paul , john. Как я могу отображать их заголовки, а именно: Member List: Paul Smith , John Doe?

ответ

3

Словари (в стиле Zope3) только с именем утилиты, и вы можете получить их, как это:

from zope.component import getUtility 
from zope.schema.interfaces import IVocabularyFactory 

factory = getUtility(IVocabularyFactory, vocabularyname) 
vocabulary = factory(self.context) 

, а затем вы можете получить название этого термина, как это:

fieldvalue = self.context.getField('myfield').get(self.context) 
term = vocabulary.getTerm(fieldvalue) 

print "Term value is %s token is %s and title is %s" + (term.value, term.token, term.title) 

Подробнее:

 Смежные вопросы

  • Нет связанных вопросов^_^