Skip to content

Commit 594f9ab

Browse files
committed
Merge pull request #24 from lociii/hide_empty
Add option (MENU_HIDE_EMPTY) to hide empty menu items
2 parents ca8a7d4 + e056308 commit 594f9ab

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

docs/configuration.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,12 @@ MENU_SELECT_PARENTS
1111
their ``selected`` property set to ``True`` if one of their children has its
1212
``selected`` property set to ``True``.
1313

14+
MENU_HIDE_EMPTY
15+
-------------------
16+
**Default: ``False``**
17+
18+
``MENU_HIDE_EMPTY`` controls if menu items without an explicit ``check`` callback
19+
should be visible even if they have no children
20+
1421

1522
.. _Django settings file: https://docs.djangoproject.com/en/dev/topics/settings/

menu/menu.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -185,18 +185,24 @@ def process(self, request):
185185
if not self.visible:
186186
return
187187

188+
# evaluate title
188189
self.check_title(request)
189-
self.check_children(request)
190190

191-
children = [
192-
kid
193-
for kid in self.children
194-
if kid.visible
195-
]
191+
# evaluate children
192+
visible_children = []
193+
self.check_children(request)
194+
for child in self.children:
195+
child.process(request)
196+
if child.visible:
197+
visible_children.append(child)
198+
199+
hide_empty = getattr(settings, 'MENU_HIDE_EMPTY', False)
200+
if hide_empty and not self.check and not len(visible_children):
201+
self.visible = False
202+
return
196203

197204
curitem = None
198-
for item in children:
199-
item.process(request)
205+
for item in visible_children:
200206
item.selected = False
201207

202208
if item.match_url(request):

0 commit comments

Comments
 (0)