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

2024-05-13 03:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个folderish ATDocument类,通过generic setup创建,generic setup xml配置文件定义了以下视图变量:

<property name="immediate_view">TemplateFileName</property>
<property name="default_view">TemplateFileName_view</property>
<property name="view_methods">
    <element value="TemplateFileName_view"/>
</property>

是否可以将该视图替换为调度程序,即BrowserView类,该类在调用时将调度实际的ViewPagetTemplateFile()实例?你知道吗

我尝试用该类的方法名替换模板文件名,但似乎不起作用。我还跟踪了ATDocument的继承树,从ATCTContent到BaseContent,但是我没有找到任何视图的定义,所以我猜视图是通过一个继承的mix-in进行处理的。你知道吗


Tags: nameview视图default定义配置文件setupproperty
1条回答
网友
1楼 · 发布于 2024-05-13 03:20:44

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)()

此示例视图按其他视图的名称查找它们,并将它们呈现到位,作为dispatcher本身的结果返回。你知道吗

请注意,一般来说,如果使用视图,我会确保在其名称前面包含@@视图名称空间,以防止意外使用同名的外观项。你知道吗

相关问题 更多 >