Plone / form.SchemaForm - 如何在SchemaForm中重新定位按钮?

时间:2014-12-05 12:24:17

标签: plone

我有一个接口类,一个映射到后端数据库的类,以及一个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

我想将按钮重新定位在父级下方,而不是位于表单底部。这是可能的还是我必须创建某种模板文件?

1 个答案:

答案 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