一个简单的zope3菜单系统

z3c.menu.simple的Python项目详细描述


这个包提供了一个基于viewlets的简单菜单实现。

Simple Menu

z3c.menu.simple包提供了一个简单的菜单实现 允许您基于内容提供程序和viewlet实现简单的菜单。

现在有一些SimpleMenuItem菜单项实现和 一个选项卡式菜单,其中有tab/tab项和action/action项 包裹。

让我们看看这意味着什么。

ContextMenu

>>> from zope.viewlet.interfaces import IViewlet
>>> from zope.viewlet.interfaces import IViewletManager

让我们创建一个菜单,这意味着我们定义了一个viewlet管理器界面:

>>> class IMenu(IViewletManager):
...     """Menu viewlet manager."""

然后,现在可以使用此界面创建viewlet管理器:

>>> from zope.viewlet import manager
>>> Menu = manager.ViewletManager('left', IMenu)

现在我们必须定义一个上下文:

>>> import zope.interface
>>> from zope.app.container import contained
>>> from zope.app.container.interfaces import IContained
>>> class Content(contained.Contained):
...     zope.interface.implements(IContained)
>>> root['content'] = Content()
>>> content = root['content']
>>> from zope.publisher.browser import TestRequest
>>> request = TestRequest()
>>> from zope.publisher.interfaces.browser import IBrowserView
>>> class View(contained.Contained):
...     zope.interface.implements(IBrowserView)
...     def __init__(self, context, request):
...         self.__parent__ = context
...         self.context = context
...         self.request = request
>>> view = View(content, request)
>>> menu = Menu(content, request, view)

所以最初没有菜单被渲染:

>>> menu.update()
>>> menu.render()
u''

但现在我们为iMenu注册了一个上下文菜单项

>>> import zope.component
>>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer
>>> from z3c.menu.simple.menu import ContextMenuItem
>>> class MyLocalLink(ContextMenuItem):
...
...     __name__ = u'MyLocalLink'
...     urlEndings = 'myLocal.html'
...     viewURL = 'myLocal.html'
>>> # Create a security checker for viewlets.
>>> from zope.security.checker import NamesChecker, defineChecker
>>> viewletChecker = NamesChecker(('update', 'render'))
>>> defineChecker(MyLocalLink, viewletChecker)
>>> zope.component.provideAdapter(
...     MyLocalLink,
...     (zope.interface.Interface, IDefaultBrowserLayer,
...     IBrowserView, IMenu),
...     IViewlet, name='MyLocalLink')

现在看看如果使用imenu viewlet管理器我们会得到什么:

>>> menu.update()
>>> print menu.render()
<a href="http://127.0.0.1/content/myLocal.html"
   class="inactive-menu-item">MyLocalLink</a>

TabbedMenu

现在我们创建一个名为mastermenu的选项卡式菜单:

>>> class IMasterMenu(IViewletManager):
...     """Master menu viewlet manager."""

让我们用这个界面和tabmenu作为基础创建一个viewlet管理器 课程:

>>> from z3c.menu.simple.menu import TabMenu
>>> MasterMenu = manager.ViewletManager('masterMenu', IMasterMenu,
...                                     bases=(TabMenu,))

我们像以前一样使用相同的上下文、请求和视图:

>>> masterMenu = MasterMenu(content, request, view)

所以最初没有菜单被渲染:

>>> masterMenu.update()
>>> masterMenu.render()
u''

现在我们注册一个菜单选项卡,它也是一个viewlet管理器:

>>> from zope.browserpage import viewpagetemplatefile
>>> from z3c.menu.simple import ITab
>>> from z3c.menu.simple.menu import Tab
>>> class MyTabs(Tab):
...     template = viewpagetemplatefile.ViewPageTemplateFile('tab.pt')
>>> myTabs = MyTabs(content, request, view)

同样在这里,最初没有选项卡被呈现:

>>> myTabs.update()
>>> myTabs.render()
u''

现在我们注册一个菜单操作,它也是一个viewlet管理器:

>>> from z3c.menu.simple import IAction
>>> from z3c.menu.simple.menu import Action
>>> class MyActions(Action):
...     template = viewpagetemplatefile.ViewPageTemplateFile('action.pt')
>>> myActions = MyActions(content, request, view)

同样在这里,最初没有选项卡被呈现:

>>> myActions.update()
>>> myActions.render()
u''

在设置选项卡菜单选项卡操作之后,我们开始 注册选项卡菜单项:

>>> from z3c.menu.simple.menu import TabItem
>>> class MyTab(TabItem):
...
...     __name__ = u'MyTab'
...     url = 'myTab.html'
...     selectedViewNames = ['myTab.html']
>>> tabChecker = NamesChecker(('update', 'render', 'css', 'selected'))
>>> defineChecker(MyTab, tabChecker)
>>> zope.component.provideAdapter(
...     MyTab,
...     (zope.interface.Interface, IDefaultBrowserLayer,
...     IBrowserView, ITab),
...     IViewlet, name='MyTab')

现在看看如果选项卡viewlet manager被渲染,我们会得到什么:

>>> myTabs.update()
>>> print myTabs.render()
<div class="tabMenu">
  <span class="inactive-menu-item">
  <a href="myTab.html">MyTab</a>
</span>
</div>

在显示如何使用选项卡菜单项之后,我们将注册菜单操作 物品。

>>> from z3c.menu.simple.menu import ActionItem
>>> class MyAction(ActionItem):
...
...     __name__ = u'MyAction'
...     title = 'myAction'
>>> actionChecker = NamesChecker(('update', 'render', 'title'))
>>> defineChecker(MyAction, actionChecker)
>>> zope.component.provideAdapter(
...     MyAction,
...     (zope.interface.Interface, IDefaultBrowserLayer,
...     IBrowserView, IAction),
...     IViewlet, name='MyAction')

现在看看如果使用了action viewlet manager,我们会得到什么:

>>> myActions.update()
>>> print myActions.render()
<div class="actionMenuWrapper">
  <ul class="actionMenu">
    <li class="inactive-menu-item">
      <a href="">
        <div>myAction</div>
      </a>
    </li>
  </ul>
</div>
<div class="clearActionMenu" />

CHANGES

0.6.0 (2010-07-14)

  • 依赖于zope.browserpage而不是zope.app.pagetemplate 所需的代码已移到那里。
  • 不再使用不推荐的zope.testing.doc[unit]test 取而代之的是doctest。

0.5.2 (2009-11-19)

  • 删除了zope.app.zapi依赖项。

0.5.1 (2008-01-25)

  • 错误:更新的元数据和文档。

0.5.0 (2008-01-21)

  • 初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java流/下载文件,无需在Spring Boot中保留内存   kotlin/java是否有类似TryParse()的东西?   java Spring引导找不到用户类型的属性ID   java Spring 2到Spring 3的迁移:一个控制器用于多个视图   java包含多个程序包名为“安卓”的库。支持图样可提取'   java spring JPA是否支持自定义值框架?   java转义出基于文本字段的搜索栏   java AAPT:错误:未找到样式属性“安卓:attr/WindowsPlashCreenBackground”   java从文本文件中读取纬度和经度   java哪里可以找到如何使用排序的示例。顺序ignorecase(),其中nullhandling nulls last用于自定义Spring JPA如何提供查询   尝试使用Dialogflow上的Webhook动态给出响应时,java获取Webhook响应错误(206)   如何在java中替换匹配的字符串?   java模拟数学的最大价值。随机的   java Spring RestTemplate GET请求未给出正确响应   春爪哇。lang.IllegalArgumentException   java系统。load()永远不会发生   java剪辑循环不工作   java如何从maven构建中删除staxapi   java ThreadPoolExecutor的排队行为是否可以自定义,以更喜欢创建新线程而不是排队?