自定义添加和编辑模板Dextertiy

时间:2014-06-04 17:26:43

标签: python plone dexterity

'我有一个名为foo.package的包。我还有一个名为mydocument.py的内容项。作为标准结构,在foo / package内部我有浏览器,内容,配置文件等。我想要实现的是为我的内容项创建一个自定义的添加模板,即mydocument。 我已阅读此链接http://docs.plone.org/external/plone.app.dexterity/docs/advanced/custom-add-and-edit-forms.html

中的文章

我所做的是在浏览器目录中创建了一个文件,并将其命名为mydocumentaddform.py。另外,在我的浏览器目录中,我有模板目录。

mydocumentaddform.py中的代码:

from five import grok
from plone.directives import dexterity, form
from Products.CMFCore.utils import getToolByName
grok.templatedir('templates')

class mydocumentaddform(dexterity.AddForm):
    grok.name('foo.package.mydocument')
    form.wrap(False)

在browser / templates目录中,我创建了模板mydocumentaddform.pt。但是,我添加mydocument内容后,我的自定义mydocumentaddform模板没有呈现,因为在模板中我添加了js脚本来检测自定义添加模板是否覆盖默认添加模板。当我查看我的实例时,有一个UserWarning,有一个未关联的模板配置指向我的添加模板:〜... /foo/package/browser/templates/mydocumentaddform.pt

有没有人遇到过同样的问题?或者还有其他方法吗?感谢。

*是的,我忘了在grok.name上包含引号。

更新: 我在ViewPageTemplateFile类中找到了一个临时解决方案。这是更新后的代码:

from five import grok
from plone.directives import dexterity, form
from Products.CMFCore.utils import getToolByName
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
grok.templatedir('templates')

class mydocumentaddform(dexterity.AddForm):
    grok.name('foo.package.mydocument')
    template = ViewPageTemplateFile('templates/mydocumentaddform.pt')
    form.wrap(False)

读取了自定义添加模板,但是,我的实例仍然总是说我使用的模板仍然没有关联。正如我所观察到的,当我将基类替换为dexterity.DisplayForm时,实例错误消失了。有了这个临时解决方案,由于这种持续性错误,我不确定将来是否会产生任何影响。

1 个答案:

答案 0 :(得分:0)

我在您的代码中看到了一些问题:您错过了名称上的引号:

grok.name('foo.package.mydocument')

您需要定义上下文:

grok.context(IMyDocument)

你宣布了一个附加图层吗?那么你需要:

grok.layer(IMyLayer)

您可以在collective.nitf找到一个有效的例子。