0

ジェネリックセットアップを介してフォルダー化されたATDocumentクラスを作成しましたが、ジェネリックセットアップxml構成ファイルには次のビュー変数が定義されています。

<property name="immediate_view">TemplateFileName</property>
<property name="default_view">TemplateFileName_view</property>
<property name="view_methods">
    <element value="TemplateFileName_view"/>
</property>

そのビューをディスパッチャー、つまり__call__で実際のViewPagetTemplateFile()インスタンスをディスパッチするBrowserViewクラスに置き換えることは可能ですか?

テンプレートファイル名をそのクラスのメソッド名に置き換えてみましたが、うまくいかないようです。また、ATCTContentからBaseContentまでATDocumentの継承ツリーをたどりましたが、ビューの定義が見つからなかったので、継承されたミックスインの1つを介してビューが処理されると思います。

4

1 に答える 1

1

GenericSetup xmlファイルの名前は、ビュー名またはスキンアイテムのいずれかです。ビュー名は、URLでビューに直接名前を付ける場合と同じトラバーサルメカニズムを使用して検索されます。

したがって、URLで到達できるものはすべて、ビューメソッドとして使用できます。__call__これには、メソッド内の他のビューにディスパッチするビューが含まれます。

from zope.publisher.browser import BrowserView
from zope.component import getMultiAdapter

class DispatchingView(BrowserView):
    def __call__(self):
        if somecondition:
            newviewname = 'foo'
        else:
            newviewname = 'bar'

        return getMultiAdapter((self.context, self.request), name=newviewname)()

このサンプルビューは、他のビューを名前で検索し、ディスパッチャ自体の結果として返されるようにレンダリングします。

通常、ビューを使用している場合は@@、同じ名前のスキンアイテムが誤って使用されないように、名前の前にビューの名前空間を含めるようにしてください。

于 2012-06-06T08:53:00.580 に答える