我使用模式扩展为所有文件夹添加了一个属性。新属性称为 greetingText。每个文件夹都可以在整个链 A > B > C 中拥有 greetingText,但是我将 greetingText 设置为空字符串 ('')。如果 B 有一个 greetingText 并且当前上下文是针对对象 B 的,那么它应该显示 B greetingText。如果文件夹 B 或 C 的 greetingText 为空字符串,那么如果对象 B 是当前上下文,我希望 obj.getFields('greetingText') 改为提供容器文件夹 A 的 greetingText。我知道这是 Acquisition 的工作方式,但我认为只有当文件夹 B 的 greetingText 为 None 而不是实际值(即空字符串)时,它才会这样工作。这是来自连接到控制器页面模板的控制器 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