Plone表单禁用主模板

时间:2014-10-08 09:31:18

标签: forms templates view plone

这些天我正在接近Plone。我用表单构建了一个页面。

我想禁用plone主模板(不仅是表单模板)并构建我自己的页面(带有.pt文件)。我怎么能做到这一点?

from Products.statusmessages.interfaces import IStatusMessage
from z3c.form import button
from z3c.form import form, field

from zope.interface import Interface
from zope.schema import TextLine
from zope.i18nmessageid import MessageFactory
_ = MessageFactory('hello_world')


class IHelloWorldForm(Interface):

    hello_world_name = TextLine(
        title=_(u'Name'),
        description=_(u'Please enter your name.'),
        required=False)


    class HelloWorldForm(form.Form):

    fields = field.Fields(IHelloWorldForm)
    ignoreContext = True

    def updateWidgets(self):
        super(HelloWorldForm, self).updateWidgets()

    @button.buttonAndHandler(u'Save')
    def handleSave(self, action):
        data, errors = self.extractData()
        if errors:
            return False

        if data['hello_world_name'] is not None:
            hello_name = data['hello_world_name']
        else:
            hello_name = 'World'

        IStatusMessage(self.request).addStatusMessage(
            "Hello %s" % hello_name,
            'info')
        redirect_url = "%s/@@hello_world_form" % self.context.absolute_url()
        self.request.response.redirect(redirect_url)

    @button.buttonAndHandler(u'Cancel')
    def handleCancel(self, action):
        IStatusMessage(self.request).addStatusMessage(
            "Hello No One",
            'info')
        redirect_url = "%s/@@hello_world_form" % self.context.absolute_url()
        self.request.response.redirect(redirect_url)

from plone.z3cform.layout import wrap_form
HelloWorldFormView = wrap_form(HelloWorldForm)

1 个答案:

答案 0 :(得分:1)

您可以使用自己的页面模板,使用一个!

from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile

... 

class HelloWorldForm(form.Form):

    template = ViewPageTemplateFile('custom.pt')

...

另一种解决方案,可能是更好的解决方案,如果您必须自定义多个表单。 您应该创建自己的表单包装器。目前你正在使用plone.z3cform中的一个,它显然使用了plone的默认main_template。

按照plone.app.z3cform Form main template override

上的说明操作