Plone 4.3.x - grokcore.view - UserWarning:配置后找到以下未关联的模板

时间:2015-02-06 12:50:29

标签: templates plone dexterity grok

在一个普通的Plone 4.3.3站点(Ubuntu 14.04.1LTS上的统一安装程序)上,在使用zopeskel和paster样板文件更新buildout.cfg并运行buildout之后,我在src文件夹中成功创建了一个dexterity包:

$ cd src  
$ ../bin/zopeskel dexterity my.package

更新buildout.cfg(将my.package添加到eggs部分并将src / my.package添加到develop部分)并运行buildout后,我将内容添加到我的新包中:

$ cd my.package  
$ ../../bin/paster addcontent dexterity_content

我调用了新的内容类型mytype,导致mytype.py,一个名为mytype_templates的模板文件夹等。

重新启动Plone和....到目前为止,非常好......

然后我将模板添加到mytype_templates文件夹:

add.pt
edit.pt
view.pt

在mytype.py文件中,我添加了所有必要的导入,模式定义

Class Imytype(form.Schema, IImageScaleTraversable):
    ....
    ....

等等,显然也是视图,添加和编辑类:

class View(dexterity.DisplayForm):
    grok.context(Imytype)
    grok.require('zope2.View')

    # Disable turn fieldsets to tabs behavior
    enable_form_tabbing  = False

    def update(self):
        super(View, self).update()


class Add(dexterity.AddForm):
    grok.name('my.package.mytype')

    # Disable turn fieldsets to tabs behavior
    enable_form_tabbing  = False

    def __init__(self, context, request):
        super(Add, self).__init__(context, request)
    ......
    ......

class Edit(dexterity.EditForm):
    grok.context(Imytype)

    # Disable turn fieldsets to tabs behavior
    enable_form_tabbing  = False

    def update(self):
        super(Edit, self).update()
    ......
    ......

当我以前台模式重新启动Plone站点时,收到以下消息:

2015-02-06 12:52:41 INFO ZServer HTTP server started at Fri Feb  6 12:52:41 2015
Hostname: 0.0.0.0
Port: 8080
/home/Plone434_site/buildout-cache/eggs/grokcore.view-2.8-py2.7.egg/grokcore/view/templatereg.py:261: UserWarning: Found the following unassociated template after configuration: /home/Plone434_site/zinstance/src/my.package/my/package/mytype_templates/edit.pt
  warnings.warn(msg, UserWarning, 1)
/home/Plone434_site/buildout-cache/eggs/grokcore.view-2.8-py2.7.egg/grokcore/view/templatereg.py:261: UserWarning: Found the following unassociated template after configuration: /home/Plone434_site/zinstance/src/my.package/my/package/mytype_templates/add.pt
  warnings.warn(msg, UserWarning, 1)
2015-02-06 12:52:46 INFO Zope Ready to handle requests

看似grok成功获取了view.pt,但没有成功地获取add.pt和edit.pt
这可以通过自定义模板来确认。对view.pt的更改呈现正常,对add.pt和edit.pt的更改没有结果。 Plone回退到默认的敏捷模板,因为add.pt和edit.pt没有被grokked。

我通过添加以下内容找到了解决方法:

....
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
....

和Add class:

    template = ViewPageTemplateFile('mytype_templates/add.pt')

和编辑类:

    template = ViewPageTemplateFile('mytype_templates/edit.pt')

显然上面列出的错误消息仍然存在,但至少它可以工作,我可以自定义add.pt和edit.pt. 虽然我可以忍受这种解决方法,但我想知道为什么只有view.pt是grokked而不是add.pt和edit.pt. 请注意,使用Plone 4.3.1,4.3.2,4.3.3和4.3.4,这个(奇怪的?)行为也是重复的

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您必须声明视图的namecontextlayerschema;使用这样的东西(注意你可能遗漏的grok.layer方法):

class AddForm(dexterity.AddForm):
    grok.name('my.package.mytype')
    grok.layer(Imylayer)
    grok.context(Imytype)
    schema = Imytype

    def update(self):
        super(AddForm, self).update()
        ...


class EditForm(dexterity.EditForm):
    grok.context(Imytype)
    grok.layer(Imylayer)
    schema = Imytype

    def update(self):
        super(EditForm, self).update()
        ...

或者,您可以完全跳过使用Grok并通过ZCML注册所有内容。

可以在collective.nitf包中找到此示例。有a branch using Groka pull request removing it