debian-django-admin-tools/admin_tools/menu/utils.py

42 lines
1.3 KiB
Python

"""
Menu utilities.
"""
from django.conf import settings
try:
from importlib import import_module
except ImportError:
# Django < 1.9 and Python < 2.7
from django.utils.importlib import import_module
from django.core.urlresolvers import reverse
def _get_menu_cls(menu_cls, context):
if isinstance(menu_cls, dict):
curr_url = context.get('request').path
for key in menu_cls:
admin_site_mod, admin_site_inst = key.rsplit('.', 1)
admin_site_mod = import_module(admin_site_mod)
admin_site = getattr(admin_site_mod, admin_site_inst)
admin_url = reverse('%s:index' % admin_site.name)
if curr_url.startswith(admin_url):
mod, inst = menu_cls[key].rsplit('.', 1)
mod = import_module(mod)
return getattr(mod, inst)
else:
mod, inst = menu_cls.rsplit('.', 1)
mod = import_module(mod)
return getattr(mod, inst)
raise ValueError('Dashboard menu matching "%s" not found' % menu_cls)
def get_admin_menu(context):
"""
Returns the admin menu defined by the user or the default one.
"""
return _get_menu_cls(getattr(
settings,
'ADMIN_TOOLS_MENU',
'admin_tools.menu.DefaultMenu'
), context)()