Anonymous avatar Anonymous committed 557ad44

ADMIN_TOOLS_MENU can be configured as ADMIN_TOOLS_INDEX_DASHBOARD with dict

Comments (0)

Files changed (1)

admin_tools/menu/utils.py

 Menu utilities.
 """
 
+import types
+
 from django.conf import settings
 from django.core.exceptions import ImproperlyConfigured
 from django.utils.importlib import import_module
+from django.core.urlresolvers import reverse
 
 
-def get_admin_menu():
+def _get_menu_cls(menu_cls, context):
+    if type(menu_cls) is types.DictType:
+        curr_url = context.get('request').META['PATH_INFO']
+        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.
     """
-    menu_cls = getattr(
+    return _get_menu_cls(getattr(
         settings,
         'ADMIN_TOOLS_MENU',
         'admin_tools.menu.DefaultMenu'
-    )
-    mod, inst = menu_cls.rsplit('.', 1)
-    mod = import_module(mod)
-    return getattr(mod, inst)()
+    ), context)()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.