我正在编写一个python脚本来将另一个CMS的内容导入plone4.1。由于许多原因,我这样运行它:bin/instance run path/to/myscript
我的问题是如何为ID/shortname中有连字符的文件夹获取正确的上下文。例如,在一个名为mysite的plone站点的根目录下,我可以使用一个名为“sub folder”的文件夹,如下所示:
from Products.CMFCore.utils import getToolByName
urltool = getToolByName(app.mysite, "portal_url")
portal = urltool.getPortalObject()
folder = getattr(portal, 'sub-folder')
但是如果我想在这个子文件夹中创建一个文件夹或页面,下面会抛出一个错误:“AttributeError:sub”
^{pr2}$对新闻文件夹(没有连字符)执行相同操作不会产生错误:
urltool = getToolByName(app.mysite.news, "portal_url")
portal = urltool.getPortalObject()
只是在尝试门户网站.sub-文件夹抛出相同的错误。在
那么什么是python代码来获得正确的上下文“http://localhost:8080/mysite/sub folder“这样我就可以成功地调用invokeFactory方法并在mysite/sub folder中创建文件夹或页面?在
如果我需要找到http://localhost:8080/mysite/sub-folder/2nd-level“?在
在我的在线文档中找不到一个名为horten的文件夹。但是,如果您在Plone中手工创建这些项,那么短名称显然有连字符,因此必须有一种方法来获取正确的文件夹上下文。在
你已经做到了:
所以你有一个连字符的文件夹,在“folder”变量中引用。在
您可以使用folder变量调用invokeFactory,这样就完成了。它知道它在普隆的什么地方。在
运行invokeFactory不需要使用portal_url工具。但如果你想要,而不是像你写的那样:
^{pr2}$你可以:
然而,目前(可能永远)您甚至不需要这样做,因为您的子文件夹的portal_url工具与整个站点的portal_url工具是相同的,因此您可以写下:
这是因为如果你使用:
python认为您试图在}之间做一个区别。
相反,您必须使用以下语法:
^{pr2}$app.mysite.sub
和{或者
相关问题 更多 >
编程相关推荐