Skip to content

Commit 52d09af

Browse files
committed
update custom menu display
1 parent 64db945 commit 52d09af

File tree

2 files changed

+65
-6
lines changed

2 files changed

+65
-6
lines changed

adminlteui/templates/admin/base.html

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,21 +168,25 @@
168168
{% get_menu request as app_list %}
169169
{% if app_list %}
170170
{% for app in app_list %}
171-
<li class="treeview">
172-
<a href="javascript:void(0)">
173-
<i class="fa fa-database"></i>
171+
<li {% if not app.admin_url %}class="treeview"{% endif %}>
172+
<a href="{% if app.admin_url %}{{app.admin_url}}{% else %}javascript:void(0){% endif %}">
173+
<i class="fa {% if app.icon %} {{app.icon}} {% else %}fa-database{% endif %}"></i>
174174
<span style="overflow: hidden; display: inline-block; vertical-align:top;">{{ app.name }}</span>
175+
{% if not app.admin_url %}
175176
<span class="pull-right-container">
176177
<i class="fa fa-angle-left pull-right"></i>
177178
</span>
179+
{% endif %}
178180
</a>
181+
{% if not app.admin_url %}
179182
<ul class="treeview-menu">
180183
{% for model in app.models %}
181184
{% if model.admin_url %}
182-
<li><a href="{{ model.admin_url }}" ><i class="fa fa-circle-o"></i>{{ model.name }}</a></li>
185+
<li><a href="{{ model.admin_url }}" ><i class="fa {% if model.icon %} {{model.icon}} {% else %}fa-circle-o{% endif %}"></i>{{ model.name }}</a></li>
183186
{% endif %}
184187
{% endfor %}
185188
</ul>
189+
{% endif %}
186190
</li>
187191
{% endfor %}
188192
{% endif %}

adminlteui/templatetags/adminlte_menu.py

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from django.contrib.admin import AdminSite
66
from django.http import HttpRequest
77
from django.utils.translation import gettext_lazy as _
8+
from adminlteui.templatetags.adminlte_options import get_adminlte_option
9+
from adminlteui.models import Menu
810

911
try:
1012
from django.urls import reverse, resolve
@@ -19,6 +21,53 @@
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)
2372
def 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

Comments
 (0)