1

私は単純な grok と Plone 4.1.4 を使用しています。これまでのところ、ここから取得したバージョン 1.2.0 および 1.1.1 の既知の適切な構成を試しましたfive.grok

リダイレクトで 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 派生クラスに update メソッドを追加するだけです。

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 のパブリッシャー パッケージには、Zope2 パブリッシャーが提供するものとはわずかに異なる API があります。five.grokその違いを橋渡しします。ただし、正しく一致させるには、正しいバージョンが必要です。

Plone 4.1 (Zope 2.13) の場合、必ずfive.grokバージョン 1.3.1 以降を使用してください:

  • リダイレクト メソッドが正しく機能するように修正します。Zope 3 とは異なり、trusted はサポートしていません。

Plone 4.2 にアップグレードする場合、正しいバージョンのピンが含まれている versions.cfg ファイルに含まれています。

于 2013-02-04T21:53:39.593 に答える
3

Martijnの答えが最も正しいです。ただし、回避策として、本番環境で Five.grok バージョンを 1.3.1 以上にアップグレードできない場合は、「self.redirect(url_string)」の代わりに「self.request.response.redirect(url_string)」を使用できます。 . それはとても醜いです、私は知っています、そして私はこの条件の下でのみこの代替手段を使用することをお勧めします.

于 2013-02-19T20:11:40.403 に答える