杜尔曼应用容器工具
dolmen.app.container的Python项目详细描述
dolmen.app.container是要使用的工具的集合 Dolmen应用中的容器。
开始
我们导入grok、请求和身份验证工具,以便使用 在我们的测试中:
>>> from grok import testing >>> from zope.component import getMultiAdapter >>> from zope.publisher.browser import TestRequest >>> from zope.security.testing import Principal, Participation >>> from zope.security.management import newInteraction, endInteraction
名称选择器
为了得到关于容器密钥的一致策略, dolmen.app.container为 dolmen.content.icontainer对象。
我们创建容器类型:
>>> import dolmen.content >>> class Folder(dolmen.content.Container): ... dolmen.content.name('a folderish content') ... dolmen.content.require('dolmen.content.Add') >>> testing.grok_component('folder', Folder) True >>> root = getSite() >>> folder = Folder() >>> root['folder'] = folder
我们现在创建一个简单的内容类型:
>>> from zope.interface import Interface, implements >>> class IDocument(Interface): ... pass >>> class Document(dolmen.content.Content): ... dolmen.content.name('a document') ... implements(IDocument) >>> testing.grok_component('doc', Document) True >>> manfred = Document() >>> manfred.__content_type__ 'a document' >>> manfred.title = u"Manfred"
要使用namechooser,我们只需使容器适应 机械增压器接口:
>>> from zope.container.interfaces import INameChooser >>> chooser = INameChooser(folder) >>> chooser <dolmen.app.container.namechoosers.NormalizingNameChooser object at ...>
如果未提供名称,则组件使用对象的标题 计算ID:
>>> chooser.chooseName(name='', object=manfred) 'manfred'
如果提供了名称,则尽可能使用:
>>> chooser.chooseName(name='furry elephant', object=manfred) 'furry elephant'
如果名称已经存在,则在ID的末尾添加一个数字。 这样,名称选择器将尝试0到100之间的所有值,并且 保持第一个成功的组合:
>>> folder['manfred'] = object() >>> chooser.chooseName(name='', object=manfred) 'manfred_1'
如果没有解决方案,则会引发错误:
>>> for i in range(0, 101): ... folder['manfred_%d' % i] = object() >>> chooser.chooseName(name='', object=manfred) Traceback (most recent call last): ... ValueError: Cannot find a unique name based on `manfred` after 100 attemps.
列表
要完成容器的工具,请注册 视图,负责将容器的内容显示为表。
首先,我们重置容器:
>>> del root['folder'] >>> folder = root['folder'] = Folder()
我们添加所有类型的内容:
>>> folder['manfred'] = Document() >>> folder['judith'] = Document() >>> folder['subfolder'] = Folder() >>> folder['not_dolmen.content.IBaseContent'] = object()
然后,我们可以查询列表视图:
>>> listing = getMultiAdapter((folder, request), name="folderlisting") >>> listing.update()
表格行是容器值的列表:
>>> list(listing.values) [<dolmen.app.container.ftests.Document object at ...>, <dolmen.app.container.ftests.Document object at ...>, <object object at ...>, <dolmen.app.container.ftests.Folder object at ...>]< P>显示与图标(如果存在)的链接:
>>> print listing.content() <div class="folder-listing"> <h1>Content of the folder</h1> <div><table class="listing sortable"> <thead> <tr> <th>Title</th> <th>Modification date</th> </tr> </thead> <tbody> <tr class="even"> <td><a href="http://127.0.0.1/folder/judith">judith</a></td> <td>None</td> </tr> <tr class="odd"> <td><a href="http://127.0.0.1/folder/manfred">manfred</a></td> <td>None</td> </tr> <tr class="even"> <td><a href="http://127.0.0.1/folder/not_dolmen.content.IBaseContent">not_dolmen.content.IBaseContent</a></td> <td></td> </tr> <tr class="odd"> <td><a href="http://127.0.0.1/folder/subfolder">subfolder</a></td> <td>None</td> </tr> </tbody> </table></div> </div>
学分
所有Dolmen套餐均由NPAI赞助(http://www.npai.fr)
更改日志
0.4(2010-05-31)
- 添加翻译(fr)。
- 已从文件夹列表中删除图标。
0.3(2010-01-26)
- 清理依赖项:zope.app.testing不再使用。
0.2(2009-12-26)
- 更正的导入。现在,所有依赖项都已声明。
- 更新导入以使用最新的ZTK。
0.1(2009-11-03)
- 初始版本