这些天我正在接近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)
答案 0 :(得分:1)
您可以使用自己的页面模板,使用一个!
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
...
class HelloWorldForm(form.Form):
template = ViewPageTemplateFile('custom.pt')
...
另一种解决方案,可能是更好的解决方案,如果您必须自定义多个表单。 您应该创建自己的表单包装器。目前你正在使用plone.z3cform中的一个,它显然使用了plone的默认main_template。
上的说明操作