0

我有一个 python 脚本,它返回一个基于上下文的、动态生成的简单列表:

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

    return mylist

我想将结果传递给具有词汇属性的选择字段。像这样:

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

如何将脚本结果和词汇值粘合在一起?

我找到的文档总是需要 Grok。而且它只是一个简单的列表,不需要 i18n 或其他更复杂的功能。

4

2 回答 2

1

Grokless 注册命名词汇表的方法:

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

基本上你将它指向一个返回 SimpleVocabulary 实例的函数。

于 2013-07-30T07:24:12.777 回答
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)
于 2013-07-30T08:46:13.333 回答