我已使用架构扩展为所有文件夹添加了一个属性。新属性称为greetingText。每个文件夹可以在整个链A中具有greetingText。 B> C,但是我将greetingText默认为空字符串('')。如果B有greetingText并且当前上下文是对象B,那么它应该显示B greetingText。如果文件夹B或C的greetingText有空字符串,那么如果对象B是当前上下文,我希望obj.getFields('greetingText')给出容器文件夹A的greetingText。我知道这就是Acquisition的工作原理,但我认为只有当文件夹B的greetingText为None而不是实际值(即空字符串)时才会这样。这是来自连接到Controller页面模板的Controller Python脚本的上下文。
from Products.CMFPlone import PloneMessageFactory as _
from Products.CMFCore.utils import getToolByName
plone_utils = getToolByName(context, 'plone_utils')
plone_log=context.plone_log
req = context.REQUEST
res = req.RESPONSE
greeting = context.getField('greetingText').getAccessor(context)()
msg = "id= %s"%(greeting)
res.write(msg)
return
答案 0 :(得分:3)
对象的aq_parent属性允许您获取父对象。您可以爬上对象层次结构来寻找问候语:
greeting = ''
while context is not None:
accessor = getattr(context, 'getGreetingText')
if accessor:
greeting = accessor()
if greeting:
break
context = context.aq_parent
这假设您没有更改该字段的Archetypes访问者的名称。