Как отобразить словарный запас в архетипах? - PullRequest
0 голосов
/ 12 февраля 2012

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

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?

1 Ответ

3 голосов
/ 12 февраля 2012

Словари (в стиле 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)

Подробнее :

...