我想在删除其中的项目后重定向到容器的父级。为此,我尝试订阅zope.lifecycleevent's IObjectRemovedEvent
:
@grok.subscribe(ISite, IObjectRemovedEvent)
def redirect_to_trial_on_delete(obj, event):
request = getattr(obj, 'REQUEST', None)
if request:
trial_url = obj.aq_parent.aq_parent.absolute_url()
request.response.redirect(trial_url)
删除是通过单击触发的,container/id/delete_confirmation
但是这会触发比我预期的更多的事件。我的订阅函数被调用了两次:一次是当我点击链接时,另一次是当我确认删除时。更令人困惑的是,如果我取消删除,它也会被调用。我希望只有当一个对象被从容器中移除时才会引发该事件。
在所有三种情况下,事件对象都是相同的,oldName、oldParent 等具有相同的属性值。
如何区分请求删除项目、取消请求和实际删除项目?
更新:所以似乎调用了初始事件,因为从容器中删除了对象以检查链接完整性,此时有回滚。