getToolByName()与其他人

Mik*_*maa 6 plone

访问Plone持久性实用程序的推荐方法是什么?为什么?

  • getToolByName(context,"portal_url")

  • 直接获取:context.portal_url

  • ITools界面

等等

Gia*_*oli 5

我认为答案在于其getToolByName自身的代码(http://svn.zope.org/Products.CMFCore/trunk/Products/CMFCore/utils.py?view=markup).那个方法做到了这个:

  • 作为第一次尝试,它试图通过查找界面getUtility并将其包含在上下文中来获取所需的工具(这对我来说似乎是件好事)
  • 作为后备,它试图从源上下文直接获取工具

因此,"统治所有人"的唯一方法似乎是:getToolByName 但是,正如@keul所说,还有缓存,并且在这里看(http://collective-docs.readthedocs.org/en/latest/misc/context .html#itools-interface)很明显,使用ITools接口,当它没有因为尚未实现该接口的工具而失败时,它会更快.

由于上述原因,最后我建议:

  1. ITools(更快)
  2. getToolByName(更安全)

(因为直接获取已经被getToolByName尝试过,如果它失败了,你将没有更多的财富)