我有一个folderish dexterity内容类型,还有一个活动订阅者。当创建内容类型时,我创建了一个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" />不幸的是,默认页面没有完全设置。它只显示容器页面,但在“显示”下拉列表中选择了集合。如果我单击“将内容项更改为默认视图”并选择该集合,则会将默认页面更改为该集合。
早些时候,我使用"setuphandler“来设置文件夹结构(而不是添加事件),setDefaultPage正在工作。我是不是忘记了一个步骤,因为我正在尝试通过一个事件来执行此操作?
我正在使用plone.4.3。
编辑:我也尝试过:
my_container.default_page = new_collection.id编辑:我发现了一些有趣的东西。我临时注释掉了事件订阅者中与集合相关的代码。我手动将该集合添加到容器对象中,然后将容器的默认页面设置为该集合。容器的默认页面是集合。
也许有些东西没有被正确索引?
发布于 2017-01-20 17:51:30
事实上,一切都很顺利,只是在创建了一个基于灵活性的内容类型之后,它将到达默认视图的URL,这意味着'/view‘被附加到项目的URL,它是default-view-method的别名,在这里解析为'folder_listing'-template。
为了快速克服这一问题,您可以在订阅者的方法中添加到对象URL的重定向,而不是将任何view-name附加到URL:
event.REQUEST.RESPONSE.redirect(my_container.absolute_url())https://stackoverflow.com/questions/41743054
复制相似问题