我有一个接口类,一个映射到后端数据库的类,以及一个form.SchemaForm类。
这是我的界面。
class IAsset(form.Schema):
"""Interface class of an asset
"""
...
Options = schema.Text.....
Parent = schema.Int(title=u"Parent",
required=False
)
Status = schema.Choice.....
我不认为ORM类是任何实例,但这里有一些我的SchemaForm。
class AddAsset(form.SchemaForm):
grok.name('add-asset')
grok.require('zope2.View')
grok.context(ISiteRoot)
schema = IAsset
ignoreContext = True
....
@button.buttonAndHandler(u"Select Parent Asset")
#open parent form to select a parent asset
我想将按钮重新定位在父级下方,而不是位于表单底部。这是可能的还是我必须创建某种模板文件?
答案 0 :(得分:2)
如果要重新设置按钮,则必须使用自己的模板。
在z3c.form中,您可以按照此示例执行此操作。
from z3c.form import form
class MyForm(form.Form):
template = ViewPageTemplateFile('templates/custom_template.pt')
在模板中,您可以手动访问表单的所有部分。
在您的情况下,您可以简单地渲染孔形式,但只需将您的部分渲染到formtop
槽中。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="plone"
metal:use-macro="context/main_template/macros/master">
<metal:block fill-slot="top_slot"
tal:define="dummy python:request.set('disable_border',1);
dummy python:request.set('disable_plone.leftcolumn', 1);
dummy python:request.set('disable_plone.rightcolumn', 1);
" />
<metal:block fill-slot="main">
<metal:form use-macro="context/@@ploneform-macros/form">
<metal:topslot fill-slot="formtop">
<!-- Implement your action here. -->
</metal:topslot
</metal:form>
</<metal:block>
</html>
通常使用plone.app.z3cform中定义的表单。有关详细信息,请查看此https://github.com/plone/plone.app.z3cform/blob/36586431ed8e067c761e33c725758ce2c1b460f8/plone/app/z3cform/templates/macros.pt。