Skip to main content
 首页 » 编程设计

python之使用 Plone 调用 grok.View 时,self.redirect 导致 TypeError

2025年05月04日17sharpest

我一直在使用简单的 grok 和 Plone 4.1.4。到目前为止,我尝试了从此处获取的版本 1.2.0 和 1.1.1 的已知良好配置 five.grok

我尝试将 grok.View 与重定向一起使用,每当运行重定向代码 (self.redirect('url')) 时,都会引发以下类型错误:

TypeError: redirect() got an unexpected keyword argument 'trusted' 
> /home/alex/projects/eggs/grokcore.view-1.13.5-py2.6.egg/grokcore/view/components.py(50)redirect() 
-> url, status=status, trusted=trusted) 

我发现这个讨论涉及类似的问题,但没有真正的解决方案。 gmane

重现错误真的很容易,只需在 grok.View 派生类中有一个更新方法即可。

from five import grok 
from Products.CMFCore.interfaces import ISiteRoot 
class RedirectTest(grok.View): 
    grok.context(ISiteRoot) 
    grok.require('zope2.View') 
    grok.name('testredirect') 
    def update(self): 
        self.redirect(self.url('')) 
    def render(self): 
        self.redirect(self.url('')) 

请您参考如下方法:

要在 Zope2 平台(由 Plone 使用)上使用 Grok,您需要安装正确版本的 five.grok package .

Grok 是针对 Zope Toolkit 开发的,ZTK 中的发布程序包与 Zope2 发布程序提供的 API 略有不同。 five.grok 弥合了这种差异。但是您需要有正确的版本才能进行正确的匹配。

对于 Plone 4.1 (Zope 2.13),确保使用 five.grok 1.3.1 或更新版本:

  • Fix the redirect method to properly work. Unlike in Zope 3, it doesn't support trusted.

如果您要升级到 Plone 4.2,正确的版本 pin 包含在包含的 versions.cfg 文件中。