Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plone 当存在两个相邻的相同ID时,unrestrictedTraverse获取错误的对象_Plone - Fatal编程技术网

Plone 当存在两个相邻的相同ID时,unrestrictedTraverse获取错误的对象

Plone 当存在两个相邻的相同ID时,unrestrictedTraverse获取错误的对象,plone,Plone,我有: /Plone/s/a/2011/07/07/不存在/Plone/s/a/2011/07/存在。上面的代码应该给出一个AtributeError,但是我得到了/Plone/s/a/2011/07/对象。它打印: try: path1 = /Plone/s/a path2 = 2011/07/07 #The path to traverse becomes /Plone/s/a/2011/07/07/. From #Plone to last 07, they

我有:

/Plone/s/a/2011/07/07/不存在/Plone/s/a/2011/07/存在。上面的代码应该给出一个AtributeError,但是我得到了/Plone/s/a/2011/07/对象。它打印:

try:
    path1 = /Plone/s/a
    path2 = 2011/07/07
    #The path to traverse becomes /Plone/s/a/2011/07/07/. From
    #Plone to last 07, they are normal Folders.
    ob = self.portal.unrestrictedTraverse('%s/%s/' % (path1, path2))
    print ob
except AtributeError:
    #do something
    pass

我不想从导线测量中得到“类似”的结果,这是错误的。我特别需要/Plone/s/a/2011/07/07/。如果它不存在,我想捕获异常

我可以使用哪些其他方法来查看是否有一个对象正好位于/Plone/s/a/2011/07/07/,而不是像/Plone/s/a/2011/07/那样靠近?

您点击了采集

您想获取“07”文件夹的“07”元素/属性/属性。但最后一个文件夹没有具有该id的子对象。因此,由于获取的原因,现有的“07”文件夹会询问其父元素是否有具有所述id的子对象,当然,“2011”文件夹中有该元素,即您所坐的“07”元素

这是对收购如何运作的粗略解释

另一个例子是以下URL:

“事件”文件夹实际上不在“新闻”文件夹中。所有这些“新闻”文件夹实际上并不存在,但至少有一个“新闻”文件夹存在于plone.org根目录中,尽管它没有“事件”文件夹,但它的父文件夹(plone.org)有

这里有一些参考资料:

如果要确保元素/属性/属性确实是父元素的一部分,应使用
Acquisition
中的
aq_base

<ATFolder at /Plone/s/a/2011/07 used for /Plone/s/a/2011/07>
aq_base
从元素中剥离采集链,因此不会使用采集来获取其元素。

您点击采集

您想获取“07”文件夹的“07”元素/属性/属性。但最后一个文件夹没有具有该id的子对象。因此,由于获取的原因,现有的“07”文件夹会询问其父元素是否有具有所述id的子对象,当然,“2011”文件夹中有该元素,即您所坐的“07”元素

这是对收购如何运作的粗略解释

另一个例子是以下URL:

“事件”文件夹实际上不在“新闻”文件夹中。所有这些“新闻”文件夹实际上并不存在,但至少有一个“新闻”文件夹存在于plone.org根目录中,尽管它没有“事件”文件夹,但它的父文件夹(plone.org)有

这里有一些参考资料:

如果要确保元素/属性/属性确实是父元素的一部分,应使用
Acquisition
中的
aq_base

<ATFolder at /Plone/s/a/2011/07 used for /Plone/s/a/2011/07>

aq_-base
将采集链从元素中剥离,因此不会使用采集来获取其元素。

当然,您是在反向获取参数:
year=aq_-base(getattr('2011',a))
应该是:
year=aq_-base(getattr(a,'2011'))
否则,很好。OP可能不喜欢它,但收购是Zope的重要组成部分,如果我们停止使用它,很多东西都会坏掉@马可斯弗洛梅罗:我知道这将是收购,我只是想知道如何解决这个问题。因此,我可以使用aq_base和getattr,而不是使用UnlimitedTraverse。您发布的代码片段真是不言自明。这似乎是一个很好的解决办法。我知道收购是至关重要的@Auspex,谢谢你的更正。day现在没有收购上下文,绝对URL生成和其他服务将失败…@Auspex:谢谢,我更正了snippeet的代码@有人仍在使用你ms dos:从你的问题中,我不明白你知道关于采集的“上面的代码应该给出一个AtributeError”,这就是我解释的原因@martijn pieters:说得好,谢谢。@someone:不,生成的“day”对象将没有采集上下文,因为在检索时它被剥离了。这意味着像
day.getPhysicalPath()
这样的调用将失败。您肯定是在反向获取参数:
year=aq_base(getattr('2011',a))
应该是:
year=aq_base(getattr(a,'2011'))
,否则,很好。OP可能不喜欢它,但收购是Zope的重要组成部分,如果我们停止使用它,很多东西都会坏掉@马可斯弗洛梅罗:我知道这将是收购,我只是想知道如何解决这个问题。因此,我可以使用aq_base和getattr,而不是使用UnlimitedTraverse。您发布的代码片段真是不言自明。这似乎是一个很好的解决办法。我知道收购是至关重要的@Auspex,谢谢你的更正。day现在没有收购上下文,绝对URL生成和其他服务将失败…@Auspex:谢谢,我更正了snippeet的代码@有人仍在使用你ms dos:从你的问题中,我不明白你知道关于采集的“上面的代码应该给出一个AtributeError”,这就是我解释的原因@martijn pieters:说得好,谢谢。@someone:不,生成的“day”对象将没有采集上下文,因为在检索时它被剥离了。这意味着像
day.getPhysicalPath()
这样的调用将失败。