55from django .contrib .admin import AdminSite
66from django .http import HttpRequest
77from django .utils .translation import gettext_lazy as _
8+ from adminlteui .templatetags .adminlte_options import get_adminlte_option
9+ from adminlteui .models import Menu
810
911try :
1012 from django .urls import reverse , resolve
1921 simple_tag = register .simple_tag
2022
2123
24+ def get_reverse_link (link ):
25+ if not link or '/' in link :
26+ return link
27+
28+ try :
29+ return reverse (link )
30+ except Exception as e :
31+ return None
32+
33+ def get_custom_menu (available_apps ):
34+ new_available_apps = []
35+ menu = Menu .dump_bulk ()
36+ for menu_item in menu :
37+ new_available_apps_item = {}
38+ data = (menu_item .get ('data' ))
39+ if data .get ('valid' ) is False :
40+ continue
41+
42+ new_available_apps_item ['name' ] = data .get ('name' )
43+ new_available_apps_item ['icon' ] = data .get ('icon' )
44+
45+ if data .get ('link_type' ) in (0 , 1 ):
46+ new_available_apps_item ['admin_url' ] = get_reverse_link (
47+ data .get ('link' ))
48+
49+ children = (menu_item .get ('children' ))
50+ if not children :
51+ new_available_apps .append (new_available_apps_item )
52+ continue
53+ new_available_apps_item ['models' ] = []
54+
55+ for children_item in children :
56+ if children_item .get ('data' ).get ('valid' ) is False :
57+ continue
58+ new_children_item = {}
59+ new_children_item ['name' ] = children_item .get ('data' ).get ('name' )
60+ new_children_item ['admin_url' ] = get_reverse_link (
61+ children_item .get ('data' ).get ('link' )
62+ )
63+ new_children_item ['icon' ] = children_item .get ('data' ).get ('icon' )
64+ # new_children_item['admin_url'] = children_item.get('link')
65+ new_available_apps_item ['models' ].append (new_children_item )
66+ new_available_apps .append (new_available_apps_item )
67+
68+ return new_available_apps
69+
70+
2271@simple_tag (takes_context = True )
2372def get_menu (context , request ):
2473 """
@@ -43,7 +92,12 @@ def get_menu(context, request):
4392 except Exception :
4493 pass
4594 if not available_apps :
46- logging .warn ('Django Suit was unable to retrieve apps list for menu.' )
95+ logging .warn ('adminlteui was unable to retrieve apps list for menu.' )
96+
97+ use_custom_menu = get_adminlte_option ('USE_CUSTOM_MENU' )
98+ if use_custom_menu .get ('USE_CUSTOM_MENU' ,
99+ '0' ) == '1' and use_custom_menu .get ('valid' ) is True :
100+ return get_custom_menu (available_apps )
47101
48102 for app in available_apps :
49103 if app .get ('app_label' ) == 'django_admin_settings' :
@@ -58,7 +112,8 @@ def get_menu(context, request):
58112 'delete' : True ,
59113 'view' : True
60114 },
61- 'admin_url' : '/admin/django_admin_settings/options/general_option/' ,
115+ 'admin_url' : reverse (
116+ 'admin:general_option' ),
62117 'view_only' : False
63118 }
64119 )
0 commit comments