Я придумал следующее, потому что хотел предоставить ссылку непосредственно на диалог настроек портлета. Я думаю, что значение контекста в конце функции - это тот объект, который вы хотите:
def settingsUrl(self):
# this is odd... should be much more straightforward?
# also, this is pretty slow.
manager = self.manager
context = self.context
assignment = self.data
allAss = []
while not assignment in allAss:
pam = getMultiAdapter((context,manager), IPortletAssignmentMapping)
allAss = pam.values()
if assignment in allAss:
break
if IAcquirer.providedBy(context):
context=aq_parent(aq_inner(context))
else:
context = context.__parent__
return '%s/++contextportlets++%s/%s' % (context.absolute_url(),
manager.__name__,
assignment.__name__)
Upd. 2014: похоже, что можно собрать эту информацию из свойства __portlet_metadata__
средства визуализации портлетов, которое имеет ключи key
(место назначения), category
(например, «context»), manager
(например, «plone.rightcolumn») и name
.