我有一个通过泛型设置创建的文件夹ATDocument类,泛型设置xml配置文件定义了以下视图变量:
<property name="immediate_view">TemplateFileName</property>
<property name="default_view">TemplateFileName_view</property>
<property name="view_methods">
<element value="TemplateFileName_view"/>
</property>有没有可能用dispatcher替换这个视图,即在__call__上分派实际ViewPagetTemplateFile()实例的BrowserView类?
我尝试将模板文件名替换为该类的方法名,但似乎不起作用。我还通过ATCTContent跟踪了ATDocument的继承树到BaseContent,但是我没有找到任何视图的定义,所以我猜测视图是通过继承的mix-in处理的。
发布于 2012-06-06 16:53:01
URL文件中的名称要么是视图名称,要么是皮肤项目;使用与在GenericSetup中直接命名视图时相同的遍历机制来查找视图名称。
因此,您可以通过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)()这个示例视图通过它们的名称查找其他视图,并将它们呈现在适当的位置,以作为dispatcher本身的结果返回。
请注意,通常情况下,如果正在使用视图,我会确保在其名称前面包含@@视图名称空间,以防止意外使用同名的外观项。
https://stackoverflow.com/questions/10903101
复制相似问题