Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 自定义添加和编辑模板灵活性_Python_Plone_Dexterity - Fatal编程技术网

Python 自定义添加和编辑模板灵活性

Python 自定义添加和编辑模板灵活性,python,plone,dexterity,Python,Plone,Dexterity,“我有一个名为foo.package的包。我还有一个名为mydocument.py的内容项。作为一个标准结构,在foo/package中,我有浏览器、内容、配置文件等。我想要实现的是为我的内容项(即mydocument)创建一个自定义的添加模板。 我已经从这个链接读了这篇文章 我所做的是在浏览器目录中创建了一个文件,并将其命名为mydocumentaddform.py。另外,在我的浏览器目录中,我有一个模板目录 mydocumentaddform.py中的代码: from five import

“我有一个名为foo.package的包。我还有一个名为mydocument.py的内容项。作为一个标准结构,在foo/package中,我有浏览器、内容、配置文件等。我想要实现的是为我的内容项(即mydocument)创建一个自定义的添加模板。 我已经从这个链接读了这篇文章

我所做的是在浏览器目录中创建了一个文件,并将其命名为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目录中,我创建了模板mydocumentddform.pt。但是,在添加mydocument内容时,没有呈现自定义的mydocumentaddform模板,因为在模板内部,我添加了js脚本,以检测自定义的添加模板是否覆盖默认的添加模板。当我查看我的实例时,有一个用户警告说,有一个未关联的模板配置指向我的添加模板:~/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)

自定义的add模板已经被读取,但是,我的实例总是说我使用的模板仍然没有关联。正如我还观察到的,当我将基类替换为dexterity.DisplayForm时,实例错误消失了。有了这个临时解决方案,我不确定由于这个持续的错误将来会有什么影响

我在您的代码中看到一些问题:您缺少名称上的引号:

grok.name('foo.package.mydocument')
您需要定义上下文:

grok.context(IMyDocument)
您是否声明了附加层?那么你需要:

grok.layer(IMyLayer)

您可以在中找到一个工作示例。

是的,我添加了您建议的两行,我在接口内创建了一个层。但我的实例上仍然存在此错误,这表示用户警告存在未关联的模板配置:~/foo/package/browser/templates/mydocumentaddform.pt