Python 将一个联系人表单放入main_template.pt

Python 将一个联系人表单放入main_template.pt,python,plone,Python,Plone,我正在尝试将plone中烘焙的联系人表单放入我网站的主模板中。我这样做是为了使“联系”导航按钮中的功能在plone设置下工作。我的方法是稍微修改一下,使其成为一个宏,并在main_template.pt中使用该宏。当我试图查看网站上的任何页面时,我会收到一个LocationError,除非我从contact-info.cpt中删除tal:define=“errors options/state/getErrors”行 是我在代码中的那一行中得到的错误。如果我删除了这一行,页面将呈现出我想要的样子

我正在尝试将plone中烘焙的联系人表单放入我网站的主模板中。我这样做是为了使“联系”导航按钮中的功能在plone设置下工作。我的方法是稍微修改一下,使其成为一个宏,并在main_template.pt中使用该宏。当我试图查看网站上的任何页面时,我会收到一个LocationError,除非我从contact-info.cpt中删除
tal:define=“errors options/state/getErrors”

是我在代码中的那一行中得到的错误。如果我删除了这一行,页面将呈现出我想要的样子,但在提交表单时会出错。这是那种情况下的错误。在这两种情况下,我基本上都被难倒了,如果有任何建议,我将不胜感激

更新(我使用的解决方案):

我只是想发布一个更新,告诉大家我是如何做到这一点的。来自Martijn Pieters的信息非常有助于理解为什么它不起作用,但我真的无法从那里开始工作。我最终还是求助于jQuery,在site_actions和我的自定义下拉列表中实现了这一点。我用一个div将表单的内容包装在
标记之间,我给了简单的id“contact info”。然后在主模板中,我还输入了一个通用div,其简单id为“load area”。最后一个难题是将我的contact.js文件更改为contact.js.pt并输入以下三行:

  <tal:block define="portal_url context/@@plone_portal_state/portal_url">
  jq('#load-area').load('<span tal:replace="portal_url"></span>/contact-info #contact-info');
  </tal:block>

jq(“#加载区域”).load(“/contact info#contact info”);

我想我应该发布这篇文章,以防以后它能帮助其他人。

您不能将控制器页面模板(
.cpt
)用作宏,保持不变

首先,控制器Python脚本在其“环境”(选项/state结构就是其中之一)中需要一些参数,而这些参数在重新使用其TAL语句时是不存在的。你将不得不重新制作模板,以避免依赖这些部分

其次,这是一个HTML表单,表单需要一个目标将其数据发送到。在控制器页面模板中,这是由
.metadata
文件控制的,您必须明确地设置它的目标。

试试看

但似乎没有得到支持


结合PloneFormGen,您可以创建一个联系人表单并将其显示为portlet

您是否也将contact-info.cpt.metadata文件复制到您的主题中?是的,我确实使用了您的教程作为资源,以了解联系人表单涉及哪些文件。我想Plone不知何故认为联系人信息不受页面模板的控制,但是正常的页面模板,因为模板全局变量中缺少“state”。但我猜不出原因。