我在使我的敏捷內容類型顯示自定義添加表單時遇到了問題。我已經在之前的產品中完成了這項工作,但令人驚訝的是,我無法使用Plone 4.1和plone.app.dexterity 1.0.3來完成此操作。Plone 4上的靈巧自定義AddForm模板
My 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在安裝過程中被正確註冊,並且內容類型可用且可添加。
最後,在配置文件/默認/ 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>
無關,但也許我要補充的東西在這裏...
我想我正如你所看到的,遵循正確的程序,但我仍然無法實現它的工作。
我知道類Add是獲取實例,因爲如果我提供了一個updateWidgets()方法並插入一個斷點,它會被調用;當我反思對象時,self.template是None;即使:
(Pdb) getattr(self, 'grokcore.view.directive.template')
'add'
如何向自定義類型的添加窗體提供自定義模板?
我以爲當你使用Grok時,必須將模板添加到「模板」文件夾中,並且您似乎正在使用「contact_templates」作爲目錄。 – vangheem
Dexterity KGS 1.0.3上的軟件包有一些錯誤;你在用這個嗎? http://good-py.appspot.com/release/dexterity/1.0.3-1?plone=4.1 – hvelarde