Plone 动态词汇的无趣方式?

Plone 动态词汇的无趣方式?,plone,grok,Plone,Grok,我有一个python脚本,它返回一个基于上下文的、动态生成的简单列表: def myVocabMethod(self): mylist = ['a','list','apart'] # do sth dynamic return mylist 我想将结果传递到选择字段,其中词汇表属性看起来是s.th。像这样: atapi.StringField('theField' vocabulary=.myPythonScript.myVocabMethod(),

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

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

    return mylist
我想将结果传递到选择字段,其中词汇表属性看起来是s.th。像这样:

atapi.StringField('theField'
    vocabulary=.myPythonScript.myVocabMethod(),
    (...)
),
如何将脚本结果和vocab值粘合在一起


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

注册命名词汇表的简单方法:


基本上,您可以将其指向一个返回SimpleCabulary实例的函数。

我在帖子中找到了我要查找的内容:

并在此处的官方文件中引用:

对于可能感兴趣的任何人,以下是代码:

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)

你能说得更具体些吗?什么样的动态词汇,什么样的领域,等等?展示代码。@LennartRegebro:我还没有写任何具体的代码来把它粘在一起,因为我还没有找到一个无趣的方法的例子。用我提到的文档更新了quest。没有,但是合理地说,你有一些具体的代码,你想在其中使用词汇表、模式、表单、内容类型或其他什么。这是原型吗?灵巧普隆福根?也不当你没有grok时,你问的是你如何做
@grok.provider()
?这似乎是唯一的grok部分。@Lennartreegebro:好的,谢谢,到目前为止,我带着一个代码示例回来,只是想,也许我错过了fitting docs,因为我们不应该再使用grok了,或者我弄错了?在这件事上的观点不同。我当然没有看到任何共识。正确的答案:)我只是想说,如果有一个“更快”的方法(见我自己的答案)。这里灵巧和原型的主要区别是使用Choice(source=命名为vocab),分别通过getUtilities获取vocab,对吗?