我在使用Dexterity内容类型显示自定义添加表单时遇到问题。我已经在以前的产品中完成了这个,但令人惊讶的是,我无法使用Plone 4.1和plone.app.dexterity 1.0.3来实现这一点
我的CrmContact内容类型,位于package.name.types.contact.py中,其架构以这种方式定义:
from five import grok
from zope import schema
from zope.interface import implements
from plone.directives import form, dexterity
class ICrmContact(form.Schema):
"""A contact item for the CRM"""
title = schema.TextLine(
title=_(u"Company name"),
)
...
class CrmContact(dexterity.Container):
implements(ICrmContact)
class Add(dexterity.AddForm):
grok.context(ICrmContact)
grok.name('package.name.contacts.types.contact')
grok.template('add')
我的模板位于package / name / types / contact_templates中。这是一个典型的模板。我知道它没有被渲染,因为它有一个虚拟节点,它将使用tal:content调用一个非现有方法,以便引发异常;所以我确定模板本身不是问题。
我的内容类型FTI在安装过程中已正确注册,内容类型可用且可添加。
最后,在profiles / default / types.package.name.types.contact.xml中:
<?xml version="1.0"?>
<object name="package.name.types.contact" meta_type="Dexterity FTI"
i18n:domain="package.name" xmlns:i18n="http://xml.zope.org/namespaces/i18n">
...
<!-- Method aliases -->
<alias from="(Default)" to="(dynamic view)" />
<alias from="edit" to="@@edit" />
<alias from="sharing" to="@@sharing" />
<alias from="view" to="(selected layout)" />
<!-- Actions -->
<action title="View" action_id="view" category="object"
condition_expr="" url_expr="string:${object_url}" visible="True">
<permission value="View" />
</action>
<action title="Edit" action_id="edit" category="object"
condition_expr="" url_expr="string:${object_url}/edit" visible="True">
<permission value="Modify portal content" />
</action>
</object>
无关,但也许我必须在这里添加一些内容......
我认为我遵循了正确的程序,正如您所看到的,但我仍然无法让它发挥作用。
我知道类正在获取实例,因为如果我提供updateWidgets()方法并插入断点,则会调用它;当我反省对象时,self.template为None;即使:
(Pdb) getattr(self, 'grokcore.view.directive.template')
'add'
如何为自定义类型的添加表单提供自定义模板?
答案 0 :(得分:1)
您应该删除行grok.context(ICrmContact)
。
来自http://plone.org/products/dexterity/documentation/manual/developer-manual/advanced/forms:
另请注意,我们未在此处指定上下文。添加表单始终为任何IFolderish上下文注册。