在一个普通的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,这个(奇怪的?)行为也是重复的
有什么建议吗?
答案 0 :(得分:0)
您必须声明视图的name
,context
,layer
和schema
;使用这样的东西(注意你可能遗漏的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 Grok和a pull request removing it。