python - Plone:对对象移除使用react

标签 python plone

我想在删除容器中的项目后重定向到容器的父级。为此,我尝试订阅 zope.lifecycleevent 的 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 等属性值。

我如何区分要求删除项目、取消请求和实际删除项目?

更新:所以似乎调用了初始事件,因为对象已从容器中删除以检查链接完整性,此时有回滚。

最佳答案

一位同事想出了一个可行的解决方案:

import transaction

def redirect_to_trial(trans, obj=None, parent=None):
    if obj.id not in parent:
        request = getattr(obj, 'REQUEST', None)
        if request:
            trial_url = obj.__parent__.__parent__.absolute_url()
            request.response.redirect(trial_url)

@grok.subscribe(ISite, IObjectRemovedEvent)
def on_site_delete(obj, event):
    kwargs = dict(
        obj = obj,
        parent = event.oldParent,
    )
    transaction.get().addAfterCommitHook(redirect_to_trial, kws=kwargs)

这会在提交之后进行检查,以确保对象在执行重定向之前确实已被删除。

不过,如果能确认这是否是一种合适的方法,我们将不胜感激。

关于python - Plone:对对象移除使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11218272/

相关文章:

特定文件夹中允许的 Plone 内容

python - 类型错误 : use() got an unexpected keyword argument 'warn'

python - 重新格式化列表中的字符串 - Python

python - 计算两点之间的逆时针角度

Python ocr pdf提取多种语言

plone - 不带 Plone 体的变形器

plone - 委派 Plone 管理用户和内容的本地角色

python - 使用 Python3 C API 覆盖对象方法

plone - 来自 Varnish 的用户友好的错误页面

indexing - Plone - ZODB 目录查询 sort_on 多个索引?