在ajax回調瀏覽器視圖中更新文件系統開發的定製portlet我有以下代碼來檢索生成ajax請求的portlet的關聯portlet分配:以編程方式獲取按顯示項目顯示的portlet的portlet分配顯示動態視圖
def getPortletById(self, content, portletManager, key, name):
manager = getUtility(IPortletManager, name=portletManager, context=content)
retriever = getMultiAdapter((content, manager,), IPortletRetriever)
print "getPortletById: ",content, portletManager, key, name
print "iterating portlet assignements:"
for assignment in retriever.getPortlets():
print assignment["key"], assignment["name"]
if assignment["key"] == key and assignment["name"] == name:
return assignment["assignment"]
return None
def getPortletManager(self, column):
manager = getUtility(IPortletManager, name=column)
return manager
def render(self):
print "refreshment of moonphase portlet"
content = self.context.aq_inner
print self.context
name = self.request.form.get("portletName")
managername = self.request.form.get("portletManager")
key = self.request.form.get("portletKey")
print name, managername, key
portlet = self.getPortletById(content, managername, key, name)
manager = self.getPortletManager(managername)
managerRenderer = manager(content, self.request, self)
renderer = managerRenderer._dataToPortlet(portlet.data)
renderer.update()
return renderer.render()
只要生成請求的portlet直接分配給內容或其父文件夾並顯示,就可以很好地工作。但是,當我將文件夾 的默認視圖設置爲帶有分配給它的portlet的內容項目時,迭代沒有找到在該頁面上呈現的portlet作爲默認文件夾視圖的一部分。
<PloneSite at naturfreundeskreis>
moonphase-portlet plone.rightcolumn /naturfreundeskreis/naturfreundeskreis
getPortletById: <PloneSite at naturfreundeskreis> plone.rightcolumns /naturfreundeskreis/naturfreundeskreis moonphase-portlet
iterating portlet assignements
/naturfreundeskreis calendar
2013-03-19 13:48:31 ERROR Zope.SiteErrorLog 1363715311.150.739587723624 http://midgard.user.openhosting.com:8280/naturfreundeskreis/@@refreshMoonphase
Traceback (innermost last):
Module ZPublisher.Publish, line 126, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 46, in call_object
Module kuehnel.portlets.moonphase.moonphaseview, line 21, in __call__
Module kuehnel.portlets.moonphase.moonphaseview, line 59, in render
AttributeError: 'NoneType' object has no attribute 'data'
最初的portlet呈現過程確實以某種方式找到了portlet,因爲它顯示並生成請求。但是我不能。我錯了什麼?
使用瀏覽器視圖來傳遞ajax請求的內容片段是不是很好的做法?
我將在一天結束時更新整個portlet的github回購,日期爲https://github.com/tdkuehnel/kuehnel.portlets.moonphase,以反映當前的發展狀態。在CentOS