将z3cform向导渲染为独立视图

Spa*_*nky 1 zope plone wizard z3c.form

Plone/Zope的z3cforms 继承自BrowserPage,因此应该能够在不使用其他View和View类的情况下进行渲染.当我尝试这样做时,表单呈现得很好,但没有表单的字段出现.我试图解决为什么会发生这种情况.请记住,此示例使用的是collective.z3cform.wizard,它实际上提供了两个类,一个向导和一个步骤.一个向导是一个表格(大写F),其主要提供机械粘合在一起的步骤和会话保持状态,并且步骤只是一种形式.

对我来说,感觉就像宏不正确,上下文错误,或者需要对表单进行一些包装/解包.基本上,我觉得我缺少一些神奇的代码或信息,这通常是Plone的情况.

当表单连接到使用单独的视图(这是多余的)时,表单呈现正常显示所有字段.

由于我理解这很复杂,我在GitHub上构建了一个仅示例的独立包来展示问题.如果您将此软件包安装到具有buildout的库存Plone站点中,您将获得三个视图:

http://localhost:8080/Plone/working
http://localhost:8080/Plone/almost
http://localhost:8080/Plone/broken
Run Code Online (Sandbox Code Playgroud)

工作视图需要一个单独的视图和一个全模板包裹TAL标签,这既是杂牌和冗余...但它的工作原理,并呈现与它的所有字段的形式.

破碎的观点有线了应该如何,与代表视图本身的形式,例如,用在Wizard类定义的模板.

几乎视图是相同的破碎视图,不同之处在于该模板与该向导的相关联的步骤,而不是向导本身.这会导致渲染损坏,但表单会渲染其所有字段.

我希望有人可以帮我追踪为什么破碎的视图呈现形式,完成按钮,但没有形式的字段.

先感谢您.

Dav*_*ick 5

您的断开视图不会渲染字段,因为它不会尝试渲染当前步骤.默认向导模板中包含以下内容:

<div tal:define="form nocall:view/currentStep"
   tal:replace="structure form/render" />
Run Code Online (Sandbox Code Playgroud)

查找当前步骤并呈现它.但是你已经用自己的模板覆盖了它,它只调用了ploneform-macros,这是一个通用的z3c.form,它对步骤的存在一无所知.

您应该坚持使用默认的向导模板而不是覆盖它,或者如果您需要自定义它,您应该从collective.z3cform.wizard复制默认的wizard.pt作为起点.


与此同时,你的"差点"观点确实几乎正常.这里的问题是向导的默认模板在中间呈现步骤的模板...但是你的步骤模板被设置为生成一个完整的html页面(因为它使用main_template中的主宏).如果你需要自定义这个模板,我会再次建议从czwizard复制默认步骤模板(wizard-step.pt)