plone:启用/禁用标记行为后如何重新注册视图
我创建了一个视图,如果启用了行为,该视图应该可用plone:启用/禁用标记行为后如何重新注册视图,plone,dexterity,Plone,Dexterity,我创建了一个视图,如果启用了行为,该视图应该可用 from behaviors import IMyBehavior class View(grok.View): grok.context(IMyBehavior) grok.require('zope2.View') grok.name('my-view') 我还将该行为添加到configure.zcml中 <include package="plone.behavior" file="meta.zcml"
from behaviors import IMyBehavior
class View(grok.View):
grok.context(IMyBehavior)
grok.require('zope2.View')
grok.name('my-view')
我还将该行为添加到configure.zcml中
<include package="plone.behavior" file="meta.zcml" />
<plone:behavior
title="My View Behavior"
description="foobar"
provides=".behaviors.IMyBehavior"
/>
在阅读了《我的主要标记行为》一节后,我认为这就足够了。但显然不是。
当我启用MyBehavior TTW,然后尝试打开我的视图时,该视图不可用
我意识到,如果在启用/禁用该行为后重新启动plone实例,它将按预期工作。我猜在启用行为TTW后,必须重新注册视图
现在的问题是如何做到这一点?视图无法重新注册 在momemt Zope应用服务器启动并导入Python模块时,注册将写入Zope组件注册表。这是一次性操作,与您的代码相关,而不是与您的数据相关
更像是这个问题,听起来在这个过程中还有其他的东西崩溃了。可能内容类型实际上没有提供问题中的行为标记接口。这可能是因为有什么东西干扰了这个过程:启动时没有读取代码,或者plone.behaviors中存在内部错误。请参阅optilude关于如何测试标记接口是否可用的评论。您是否可以检查您的内容的实例是否提供了IMyBehavior,例如install Products.PdbDebugMode,在其中一个实例上调用/@@pdb视图(或使用plone.app.debugtoolbar),然后检查例如IMyBehavior.providedBy(上下文)@optilude:我安装了plone.app.debugtoolbar,在重新启动服务器实例之前,IMyBehavior.providedBy(上下文)实际上为False。我还尝试了plone.app.versioningbehavior.behaviors.IVersioningSupport。在我重新启动之前,IVersioningSupport.providedBy(上下文)也为false,但是IVersioningSupport的功能在没有重新启动的情况下似乎可以正常工作。我打开了一个票证