Plone - 如何在事件订阅者中设置默认页面?

Plone - How can I setDefaultPage in an event subscriber?

我有一个文件夹灵巧的内容类型,我有一个事件订阅者。创建内容类型时,我创建了一个 Collection,它根据几个参数显示容器中的子项。创建集合后,我尝试将容器的默认页面设置为集合。

def myContainerAdded(my_container, event):
    #get container
    #set advanced query for collection
    #create collection with api.create
    my_container.setDefaultPage(new_collection.id)

configure.zcml

中的订阅者
<subscriber
  for="my.product.my_container.IMyContainer
       zope.lifecycleevent.interfaces.IObjectAddedEvent" 
  handler=".events.myContainerAdded" />

很遗憾,默认页面未完全设置。它仅显示容器页面,但集合 select 在 'Display' 下拉列表下编辑。 如果我单击 "Change content item as default view" 和 select 集合,它确实会将默认页面更改为集合。

早些时候,我使用 "setuphandler" 设置文件夹结构(与添加事件相反),并且 setDefaultPage 正在运行。自从我通过活动尝试此操作后,我是否忘记了一个步骤?

我正在使用 plone.4.3.

编辑:我也尝试过:

my_container.default_page = new_collection.id

编辑: 我发现了一些有趣的东西。暂时把事件订阅者中集合相关的代码注释掉了。我手动将集合添加到容器对象,然后将容器的默认页面设置为集合。容器的默认页面是集合。

也许有些东西没有正确编入索引?

其实一切都很顺利,只是创建了一个Dexterity-based content-type之后,会登陆default-view的URL,意思是'/view ' 附加到项目的 URL,这是 default-view-方法的别名,此处解析为 'folder_listing'-模板。

为了快速解决这个问题,您可以在订阅者的方法中添加一个指向对象 URL 的重定向,而无需将任何 view-name 附加到 URL:

event.REQUEST.RESPONSE.redirect(my_container.absolute_url())