我有一个文件夹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,但我没有找到任何视图的定义,所以我猜测视图是通过其中一个继承的混合来处理的。
答案 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)()
此示例视图按名称查找其他视图,并将它们呈现为根据调度程序本身返回的结果。
请注意,通常,我确保如果正在使用视图,请确保在其名称前包含@@
视图命名空间,以防止意外使用具有相同名称的外观项。