如何获得具有默认视图集的文件夹的absolute_url_path?

时间:2016-03-29 14:22:30

标签: plone

如果您有一个文件夹,将显示更改为内容项,选择一个页面作为默认视图,并在文件夹对象上使用方法context.absolute_url_path(),它是不正确的。

在文件夹的上下文中以及调用此方法时:

context.absolute_url_path() 

它将返回 / my-folder / my-default-page-object

文件夹上下文的absolute_url_path应该只返回 / my-folder

在设置默认页面时,是否有某种方法可以获取您所在对象的真实路径?

附加说明: 我试图从路径中减去context.getDefaultPage(),问题是plone站点对象(也就是root)上的getDefaultPage保持返回None,因为设置了默认页面,所以没有任何意义。我已经用plones开箱即用的Page dexterity对象和一个自定义灵巧对象进行了确认。

我正在运行Plone 5.

1 个答案:

答案 0 :(得分:7)

在您要描述的情况下,上下文是默认页面对象 - 而不是它包含文件夹。你想要"规范"的网址路径。 object,它是当前对象,除非该对象是默认视图。在默认视图的情况下,它是包含文件夹。

要获取规范对象的url路径,请使用plone_context_state视图:

context_state = getMultiAdapter((context, request), name=u'plone_context_state')
canonical_object = context_state.canonical_object()
canonical_url_path = canonical_object.absolute_url_path()

如果您正在使用页面模板,那就是:

context/@@plone_context_state/canonical_object/absolute_url_path

而且,如果您在URL之后,而不仅仅是它的路径组件,请使用absolute_url而不是absolute_url_path。