如果当前内容的相同字段为空,如何从父容器中获取字段值? Plone 4

时间:2013-08-21 19:20:22

标签: plone zope

我已使用架构扩展为所有文件夹添加了一个属性。新属性称为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

1 个答案:

答案 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访问者的名称。