zope.browsermenu

raw JSON →
6.0 verified Mon Apr 27 auth: no python

Browser menu implementation for Zope (version 6.0). Provides a framework for defining and rendering browser menus registered via ZCML. Used primarily in Zope-based web applications. Release cadence is low, with occasional major version bumps.

pip install zope.browsermenu
error ModuleNotFoundError: No module named 'zope.browsermenu.menu'
cause Installing an older version that does not have the submodule menu; or incorrect package name.
fix
pip install zope.browsermenu==6.0 (ensure version 6.0 is installed).
error AttributeError: module 'zope.browsermenu' has no attribute 'BrowserMenu'
cause Attempting to import BrowserMenu from the package root instead of submodule.
fix
Use 'from zope.browsermenu.menu import BrowserMenu'.
breaking In version 6.0, dropped support for Python versions below 3.9. Must upgrade Python runtime.
fix Upgrade Python to 3.9+ and update zope.browsermenu to 6.0.
gotcha Importing BrowserMenu directly from the package root (zope.browsermenu) will fail. Must import from submodule zope.browsermenu.menu.
fix Use 'from zope.browsermenu.menu import BrowserMenu' instead.
deprecated The old import path from zope.browsermenu.actions is deprecated and may be removed in a future version.
fix Use zope.browsermenu.menu for menu classes and zope.browsermenu.interfaces for interfaces.

Create a browser menu with custom menu items using Zope component architecture.

from zope.browsermenu.menu import BrowserMenu
from zope.browsermenu.interfaces import IMenuItemType
from zope.component import provideAdapter
from zope.interface import implementer

@implementer(IMenuItemType)
class MyMenuItem:
    title = 'My Item'
    def __init__(self, context, request):
        self.context = context
        self.request = request

menu = BrowserMenu('my_menu')
provideAdapter(MyMenuItem, name='my_item')

# In a browser view, render menu
# menu.getMenuItems(context, request) returns list of items