PLONE4:如何获取在shortnam中使用连字符的子文件夹的上下文

2024-10-04 01:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个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中手工创建这些项,那么短名称显然有连字符,因此必须有一种方法来获取正确的文件夹上下文。在


Tags: 方法文件夹applocalhosthttpurl错误页面
2条回答

你已经做到了:

folder = getattr(portal, 'sub-folder')

所以你有一个连字符的文件夹,在“folder”变量中引用。在

您可以使用folder变量调用invokeFactory,这样就完成了。它知道它在普隆的什么地方。在

运行invokeFactory不需要使用portal_url工具。但如果你想要,而不是像你写的那样:

^{pr2}$

你可以:

getToolByName(folder, "portal_url")

然而,目前(可能永远)您甚至不需要这样做,因为您的子文件夹的portal_url工具与整个站点的portal_url工具是相同的,因此您可以写下:

urltool = getToolByName(app.mysite, "portal_url")

这是因为如果你使用:

app.mysite.sub-folder

python认为您试图在app.mysite.sub和{}之间做一个区别。 相反,您必须使用以下语法:

^{pr2}$

或者

secondlevel = mysite.restrictedTraverse('/mysite/sub-folder/2nd-level')

相关问题 更多 >