通过GenericSetup创建的ATDocuments的自定义视图

时间:2012-06-05 18:49:28

标签: python plone zope genericsetup

我有一个文件夹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()实例?

我尝试用该类的方法名替换模板文件名,但这似乎不起作用。我也跟着ATDocument的继承树,虽然ATCTContent到BaseContent,但我没有找到任何视图的定义,所以我猜测视图是通过其中一个继承的混合来处理的。

1 个答案:

答案 0 :(得分: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)()

此示例视图按名称查找其他视图,并将它们呈现为根据调度程序本身返回的结果。

请注意,通常,我确保如果正在使用视图,请确保在其名称前包含@@视图命名空间,以防止意外使用具有相同名称的外观项。