rebecca.menu
is component for pyramid, that provides management of menu urls.
You can install rebecca.menu
with pip.
$ pip install rebecca.menu
rebecca.menu
provides include hook.:
config.include('rebecca.menu')
To add menu, use add_route_menu
directive.:
config.add_route('menu1', '/menus/menu1') config.add_route('menu2', '/menus/menu2') config.add_route_menu(menu_name="system", route_name="menu1", display_name="system menu item1")
Or use route_menu_config
decorator.:
@route_menu_config('system') class SystemMenu3(object): route_name="menu3" display_name = "system menu item3"
To get menu, use get_menu
API:
from rebecca.menu import get_menu def menu(request): system_menu = get_menu(request, system) return dict(menu=system_menu)
get_menu
returns the object that provides rebecca.menu.interfaces.IMenu
.
IMenu
has a property named menu_items
that is list including IMenuItem
.
IMenuItem
has some property, display_name
, name
and url
.
Maybe you use menu items in template such as below:
<ul class="nav"> %for m in system_menu.menu_items: <li><a href="${m.url}">${m.display_name}</a></li> %endfor </ul>
Registering menu with permission
@route_menu_config('system') class SystemMenu3(object): route_name="menu3" display_name = "system menu item3" permission = 'menu3-permission'
get_menu
check permission of request with has_permission
,
causes that menu_items includes menu items passed permission check.
If route has placeholder, the menu url fills values from request.matchdict
.
config.add_route("menu1", 'menus/menu1/{testing_vars}') menu_factory.add_item(route_name="menu1", display_name="testing-menu1")
When matchdict has values for testing_vars
as "that-is-testing", menu1's url is "menus/menu1/that-is-testing".