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 Common errors
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'.
Warnings
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.
Imports
- BrowserMenu wrong
from zope.browsermenu import BrowserMenucorrectfrom zope.browsermenu.menu import BrowserMenu - BrowserSubMenuItem
from zope.browsermenu.menu import BrowserSubMenuItem - MenuManager
from zope.browsermenu.menu import MenuManager - IMenuItemType
from zope.browsermenu.interfaces import IMenuItemType
Quickstart
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