【问题标题】:Plone form disable main template [closed]克隆表单禁用主模板[关闭]
【发布时间】:2014-10-08 09:31:18
【问题描述】:

这几天我正在接近 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)

【问题讨论】:

  • 请同时发布导入。
  • 什么意思?我不明白你在问什么
  • 我已经编辑过了。现在更清楚了吗?
  • 那里没有问题。你在问什么?
  • 您是否在<browser:page><browser:page> 声明中看到任何迹象表明您的表单不支持template="..." 属性?

标签: forms templates view plone


【解决方案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上的说明进行操作

【讨论】:

  • 并且还禁止在 custom.pt 文件 "metal:use-macro="context/main_template/macros/master" 上避开这一行
猜你喜欢
  • 2013-12-18
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多