原型使用generateNewId
方法在創建時創建標識。你可以在你自己的類型上覆蓋它。這是默認的實現,所以你可以看到它是如何工作的:
try:
from plone.i18n.normalizer.interfaces import IUserPreferredURLNormalizer
from plone.i18n.normalizer.interfaces import IURLNormalizer
URL_NORMALIZER = True
except ImportError:
URL_NORMALIZER = False
class BaseObject(Referenceable):
# ...
def generateNewId(self):
"""Suggest an id for this object.
This id is used when automatically renaming an object after creation.
"""
title = self.Title()
# Can't work w/o a title
if not title:
return None
# Don't do anything without the plone.i18n package
if not URL_NORMALIZER:
return None
if not isinstance(title, unicode):
charset = self.getCharset()
title = unicode(title, charset)
request = getattr(self, 'REQUEST', None)
if request is not None:
return IUserPreferredURLNormalizer(request).normalize(title)
return queryUtility(IURLNormalizer).normalize(title)
正如你可以看到,默認的實現推遲到IUserPreferredURLNormalizer
適配器(如果請求可用)和IURLNormalizer
實用,如果不;你也可以提供你自己的那些實現;有關這些工作方式的更多詳細信息,請參閱plone.18n.normalizer
package on GitHub。你不能區分這些類型或位置。
敏捷內容使用INameChooser
接口代替,plone.app.content
包provides an implementation使用相同的plone.i18n
基礎結構。