| Profiel van 麦田守望者异想空间Foto'sWeblogLijsten | Help |
|
31-7-2009 解决psycopg2导入错误psycopg2版本:2.0.11 Zope版本:2.10.7-final 在上述环境中创建一个ZPsycopgDA数据连接对象的时候,会出现ImportError异常,提示psycopg version mismatch (imported 2.0.11 (dt dec ext pq3))。 解决办法:在ZPsycopgDA目录中,修改DA.py文件的119行: - if psycopg2.__version__[:5] not in ALLOWED_PSYCOPG_VERSIONS: 导致这个错误的原因是,2.0.11版本的psycopg2的__version__属性会返回“2.0.11 (dt dec ext pq3)”,只有按照空格打断字符串并取得第一元素,才能正确获得版本号。 30-7-2009 解锁Plone对象如果某个对象被上了锁,导致没法对其进行操作,可以用wl_clearLocks方法为其解锁: obj = getattr(context, 'obj_id') 至于对象为何以及在什么条件下会被上锁,我尚不清楚。如果您清楚,感谢指点一二。 BaseFolder对象的manage_addFolder方法BaseFolder位于Products.Archetypes.BaseFolder.py 在Python脚本对象中,可以使用manage_addFolder方法创建一个Folder对象。从ATFolder继承下来的容器对象,都包含了这个方法。当在自定义的容器对象上调用manage_addFolder方法的时候,要明确地给type_name参数传递一个字符串值Folder。例如: context.manage_addFolder(id = 'objid', title = 'Object's title', type_name = 'Folder') 然而,不要被这个方法的字面意思所蒙蔽。只要给type_name参数传递了正确的portal_type值,还可以用它创建其他类型的内容对象。例如: context.manage_addFolder(id = 'objid', title = 'title', type_name = 'Document') 这里“正确的”含义有二。一是,type_name的值必须是已经注册的对象的portal_type值;二是,指定的portal_type必须是当前容器被允许容纳的对象类型中的一种。 实际上,manage_addFolder在做了一系列准备工作后调用invokeFactory方法,而invokeFactory最终调用portal_types对象的constructContent方法创建对象。如果很清楚自己要做些什么,也可以直接调用invokeFactory和constructContent方法。 22-7-2009 IObjectManager接口中的几个有用的方法IObjectManager位于OFS.interfaces.py文件中。IObjectManager接口定义了一个容器类需要实现的方法。其中有几个方法很有用。 def hasObject(id): def manage_delObjects(ids=[], REQUEST=None): def __getitem__(key):
IObjectManager接口还提供了诸如superValues、objectItems、objectValues等其他方法用于访问容器中的对象。 Plone的ATFolder对象通过继承和实现IATFolder接口,也提供了IObjectManager接口的功能。因此,在Plone中,以编程的方式对一个ATFolder对象施加更多的控制就变得容易许多。通过对CMFCore和CMFPlone的探索得知,还有许多其他更高层的接口可以利用。 12-7-2009 在portal_catalog中按照分类搜索使用Subject关键字当以编程方式通过portal_catalog工具搜索具有特定分类属性的内容对象的时候,使用Subject关键字。请注意首字母大写。在ZMI中,portal_catalog的Indexes页中存在一个类型为KeywordIndex,名称为Subject的索引。这就是我们所需要的。 11-7-2009 (dynamic view)和(selected layout)Plone提供了一种机制,允许开发者给实现了IATFolder接口的内容类型提供不同的显示视图(Views),而用户则可以通过Display菜单设置内容类型的动态视图。作为内容类型的开发者,特别需要留意“(dynamic view)”和“(selected layout)”的使用。即在某个内容类型的GenericSetup配置文件中,必须确保下面的两行正确出现: <alias from="(Default)" to="(dynamic view)" /> 如果,选择Display菜单中的视图没有任何作用的话,那么可以看看这两个配置值是否正确出现。 |
|
|