首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过GenericSetup创建的ATDocuments的自定义视图

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

Stack Overflow用户
提问于 2012-06-06 02:49:28
回答 1查看 83关注 0票数 0

我有一个通过泛型设置创建的文件夹ATDocument类,泛型设置xml配置文件定义了以下视图变量:

代码语言:javascript
复制
<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处理的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-06 16:53:01

URL文件中的名称要么是视图名称,要么是皮肤项目;使用与在GenericSetup中直接命名视图时相同的遍历机制来查找视图名称。

因此,您可以通过URL访问的任何内容都可以用作视图方法。这包括调度到__call__方法中的其他视图的视图:

代码语言:javascript
复制
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本身的结果返回。

请注意,通常情况下,如果正在使用视图,我会确保在其名称前面包含@@视图名称空间,以防止意外使用同名的外观项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10903101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档