已知容器x如何获取其设置为展示的链接项y?getattr取default_page返回None如何解决
容器默认展示项访问解决方案
你用getattr(x, 'default_page', None)返回None的核心原因是:默认展示项的配置通常不会直接作为容器对象的实例属性存储,大多存在容器的扩展属性存储、站点全局配置或者关联映射表中。
下面是通用的排查和实现方案:
- 第一步先确认展示项配置的存储位置,先打印容器的所有可访问属性排查对应key:
# 打印容器所有属性,找和默认页、展示项相关的key print(dir(x)) # 如果容器支持注解存储,输出注解内容排查 if hasattr(x, 'annotations'): print(x.annotations.keys())
- 如果你使用的是Plone内容管理框架(该场景最常出现的框架),使用以下代码获取:
from Products.CMFCore.utils import getToolByName # 先取全局默认页配置 portal_props = getToolByName(x, 'portal_properties').site_properties global_default_pages = portal_props.getProperty('default_page', ['index.html', 'front-page']) # 取当前容器自定义的默认页id custom_default = x.getProperty('default_page', None) target_id = None if custom_default and custom_default in x.objectIds(): target_id = custom_default else: # 没有自定义配置则遍历全局默认配置找匹配项 for page_id in global_default_pages: if page_id in x.objectIds(): target_id = page_id break # 拿到展示项y y = x[target_id] if target_id else None
- 如果你使用的是自定义开发的容器逻辑,需先确认展示项的关联规则:如果链接项y是通过UID、相对路径的方式关联到容器x,拿到存储的UID/路径后,再对应做对象查询即可得到y。
内容的提问来源于stack exchange,提问作者GhitaB
相关产品推荐
相关产品推荐

