Dolmen应用程序的面包屑导航。
项目描述
dolmen.app.breadcrumbs 为Dolmen应用程序提供面包屑导航。它注册了一个视图小部件来渲染链接。
入门
要测试面包屑的功能,我们需要创建一些内容。我们在这里使用 dolmen.content 内容,因为我们的面包屑行为仅适用于 IBaseContent 对象。
>>> import dolmen.content >>> from grokcore.component import testing >>> class Container(dolmen.content.Container): ... dolmen.content.name('A dummy container') >>> testing.grok_component('container', Container) True
现在,我们在一个假设的应用程序中创建我们的内容。
>>> from zope.component.hooks import getSite >>> app = getSite() >>> app['cave'] = Container() >>> app['cave']['pot'] = Container()
最后,我们创建一个视图。由于我们使用视图小部件,我们需要一个视图来显示某些内容。
>>> import grokcore.view >>> class simpleView(grokcore.view.View): ... grokcore.view.context(dolmen.content.IBaseContent) ... def render(self): ... return u'For test purposes' >>> testing.grok_component('simpleview', simpleView) True
适配
允许构建URL和面包屑的组件是一个提供 IAbsoluteUrl 接口的多适配器。让我们更仔细地看看。
>>> from zope.component import getMultiAdapter >>> from zope.publisher.browser import TestRequest >>> from zope.traversing.browser.interfaces import IAbsoluteURL >>> request = TestRequest() >>> url = getMultiAdapter((app['cave'], request), IAbsoluteURL) >>> url <dolmen.app.breadcrumbs.url.DescriptiveAbsoluteURL object at ...> >>> from zope.interface.verify import verifyObject >>> verifyObject(IAbsoluteURL, url) True >>> url() 'http://127.0.0.1/cave' >>> url.breadcrumbs() ({'url': 'http://127.0.0.1', 'name': ''}, {'url': 'http://127.0.0.1/cave', 'name': u'cave'})
渲染
现在,在我们的应用程序中我们有了一些内容。我们可以调用我们的视图并使用其管理器渲染视图小部件。
>>> from dolmen.app.layout import master >>> from dolmen.app.breadcrumbs import Breadcrumbs>>> view = getMultiAdapter((app['cave'], request), name="simpleview") >>> view <simpleView object at ...>
面包屑视图小部件已注册为 dolmen.app.layout.Top 管理器。
>>> manager = master.Top(app['cave'], request, view) >>> viewlet = Breadcrumbs(app['cave'], request, view, manager) >>> viewlet <dolmen.app.breadcrumbs.crumbs.Breadcrumbs object at ...>
我们的内容还没有标题。如果我们渲染视图小部件,它将使用父级的位置(__name__)。
>>> viewlet.update() >>> print viewlet.render() <div id="breadcrumb"> <span class="you-are-here">You are here:</span> <span class="crumb"> <a href="http://127.0.0.1/cave">cave</a> </span> </div>
如果我们设置一个标题,它将使用该标题。
>>> app['cave'].title = u"My cave with a fireplace" >>> viewlet.update() >>> print viewlet.render() <div id="breadcrumb"> <span class="you-are-here">You are here:</span> <span class="crumb"> <a href="http://127.0.0.1/cave">My cave with a fireplace</a> </span> </div>
它与所有类型的对象一起工作,尽管标题仅用于提供 dolmen.content.IBaseContent 的对象。
>>> app['cave']['pot']['bone'] = object() >>> bone = app['cave']['pot']['bone'] >>> viewlet = Breadcrumbs(bone, request, view, manager) >>> viewlet.update() >>> print viewlet.render() <div id="breadcrumb"> <span class="you-are-here">You are here:</span> <span class="crumb"> <a href="http://127.0.0.1/cave">My cave with a fireplace</a> <span class="breadcrumb-separator">→</span> </span> <span class="crumb"> <a href="http://127.0.0.1/cave/pot">pot</a> <span class="breadcrumb-separator">→</span> </span> <span class="crumb"> <a href="http://127.0.0.1/cave/pot/bone">bone</a> </span> </div>
如果对象无法定位,我们将引发一个TypeError异常
>>> unlocatable = Container() >>> viewlet = Breadcrumbs(unlocatable, request, view, manager) >>> viewlet.update() Traceback (most recent call last): ... TypeError: There isn't enough context to get URL information. This is probably due to a bug in setting up location information.
变更日志
0.2 (2010-02-26)
现在Breadcrumbs使用了针对zope.dublincore IDCDescriptiveProperties接口的适配,以提供名称。基本多适配器已注册为zope.location ILocation。因此,Breadcrumbs不再局限于dolmen.content IBaseContent组件。
依赖关系已得到极大清理。我们现在使用ZTK的Grok 1.1rc1版本。我们不再依赖于zope.app包。
更新了IAbsoluteUrl组件,以匹配zope.traversing的更改。视图已被移除,并由一个简单的MultiAdapter提供IAbsoluteUrl。
0.1 (2009-11-08)
首次发布
项目详情
dolmen.app.breadcrumbs-0.2.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 91ab91693eb92493ef06d429119f0807e07a557dac90b28f9a5700af7d176e31 |
|
MD5 | adf09390acafc7b10741c70e5a43fc73 |
|
BLAKE2b-256 | 8edd1fa477474c04b3d5f0857ac85bf3c02668ec33d2ebf791ca7b7f1e6d49b2 |