1

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

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

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)

我发现这个讨论处理了类似的问题,但没有真正的解决方案。格曼

重现错误真的很容易,只需在 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(''))
4

2 回答 2

5

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

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

对于 Plone 4.1 (Zope 2.13),请确保使用five.grok1.3.1 或更高版本:

  • 修复重定向方法以正常工作。与 Zope 3 不同,它不支持受信任。

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

于 2013-02-04T21:53:39.593 回答
3

Martijn 的回答是最正确的。但是,作为解决方法,如果您无法将生产环境中的 Five.grok 版本升级到 >= 1.3.1,则可以使用“self.request.response.redirect(url_string)”而不是“self.redirect(url_string)” . 我知道这太丑了,我建议仅在这种情况下使用此替代方法。

于 2013-02-19T20:11:40.403 回答