2013-07-29 3 views
0

У меня есть питон-скрипт, который возвращает возвращает контекст на основе динамически генерируется простой список:Грохотный путь для динамических словарей?

def myVocabMethod(self): 
    mylist = ['a','list','apart'] 
    # do sth dynamic 

    return mylist 

Я хотел бы передать результат выбора поля со словарем-атрибут ищет s.th , например:

atapi.StringField('theField' 
    vocabulary=.myPythonScript.myVocabMethod(), 
    (...) 
), 

Как склеить результаты скрипта и значение словаря?

Документация, которую я нашел, всегда требует Grok. Кроме того, это простой список, нет i18n или других более сложных функций.

+0

Вы можете быть более конкретным? Какой динамический словарь, какое поле и т. Д.? Показать код. –

+0

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

+0

Нет, но у вас есть какой-то конкретный код, в котором вы хотите использовать словарь или схему или тип контента или что-то еще. Это архетипы? Ловкость? PloneFormGen? Ни? Это то, что вы задаете на самом деле, как вы делаете '@ grok.provider()', когда у вас нет grok? Кажется, это единственная часть grok. –

ответ

1

Grokless способ регистрации имени словаря:

http://developer.plone.org/forms/vocabularies.html#registering-a-named-vocabulary-provider-in-zcml

В основном вы указываете на функцию, которая возвращает SimpleVocabulary экземпляр.

+0

Правильный ответ :) Я был просто любезен, если бы был «более быстрый» способ (см. Мой собственный ответ). И главное отличие от Dexterity и Archetypes здесь заключается в использовании Choice (source = named-vocab), соответственно, получить vocab через getUtilities, правильно? –

1

Сообщение, где я нашел то, что я искал это один: http://www.universalwebservices.net/web-programming-resources/zope-plone/dynamic-vocabularies-in-plone-archetypes/

И упоминается в официальных документы здесь: http://developer.plone.org/content/archetypes/fields.html#dynamic-vocabularies

Для тех, кто может быть заинтересован, это код:

from Acquisition import aq_parent 
from Products.Archetypes import atapi 
from Products.Archetypes.public import DisplayList 

YourArchetypeSchema = schemata.ATContentTypeSchema.copy() + atapi.Schema((

atapi.StringField(
    'somefieldname', 
    vocabulary = yourVocabulary, 
    ), 

)) 

class YourArchetype(base.ATCTContent): 

    def yourVocabulary(self): 
     dl = DisplayList() 
     # We can do something context-based here, 
     # f.e. get all Events in parent-folder: 
     eventlist = aq_parent(self).contentValues(filter={'portal_type' : 'Event'}) 
     for event in eventlist: 
      dl.add(event['id'], event['title']) 
     return dl 

atapi.registerType(YourArchetype, PROJECTNAME) 
Смежные вопросы