如何在Zope2应用程序根目录中(在Plone中)呈现plone-overview.pt模板?

acl*_*ark 3 zope plone

Plone有一个很好的黑客,可以消除Zope2附带的无聊的Zope Quickstart页面.它改变了这个:

在此输入图像描述

进入:

在此输入图像描述

相关代码位于Products/CMFPlone/browser/admin.zcml(https://github.com/plone/Products.CMFPlone/blob/master/Products/CMFPlone/browser/admin.zcml#L35):

  <browser:page
      for="OFS.interfaces.IApplication"
      name="plone-overview"
      class=".admin.Overview"
      permission="zope.Public"
      template="templates/plone-overview.pt"
      />
Run Code Online (Sandbox Code Playgroud)

这解释了为什么http://localhost:8080/plone-overview渲染plone-overview模板,但为什么/如何应用程序root,即http://localhost:8080呈现相同的模板?

Mar*_*ers 5

同一个ZCML文件注册一个AppTraverser适配器 ; 此适配器调整OFS.interfaces.IApplication对象IRequest以拦截遍历.

IRequest适配器publishTraverse()方法中,当index_html遍历名称时,适配器返回相同的plone-overview视图:

def publishTraverse(self, request, name):
    if name == 'index_html':
        view = queryMultiAdapter((self.context, request),
                    Interface, 'plone-overview')
        if view is not None:
            return view
    return DefaultPublishTraverse.publishTraverse(self, request, name)
Run Code Online (Sandbox Code Playgroud)

请参阅AppTraverser类定义.