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__ 上的 BrowserView 类将调度实际的 ViewPagetTemplateFile() 实例?

我尝试用该类的方法名称替换模板文件名,但这似乎不起作用。此外,我通过 ATCTContent 到 BaseContent 遵循了 ATDocument 的继承树,但我没有找到任何视图定义,所以我猜测视图是通过继承的混合组件之一处理的。

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 回答