Skip to content

Commit c0825ff

Browse files
committed
Avoid adding the same items multiple times into the same menu
[21](LaLogiaDePython#21)
1 parent 13b64cf commit c0825ff

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

menu_generator/templatetags/menu_generator.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ def get_menu(context, menu_name):
2020
:param menu_name: String, name of the menu to be found
2121
:return: Generated menu
2222
"""
23-
menu_list = getattr(settings, menu_name, defaults.MENU_NOT_FOUND)
23+
# Instantiate a new list() or else the same instance of the menu_list gets used over and over
24+
# (and possibly re-adding the menu_from_apps list on each request)
25+
menu_list = list(getattr(settings, menu_name, defaults.MENU_NOT_FOUND))
2426
menu_from_apps = get_menu_from_apps(menu_name)
2527
# If there isn't a menu on settings but there is menu from apps we built menu from apps
2628
if menu_list == defaults.MENU_NOT_FOUND and menu_from_apps:

menu_generator/tests/test_menu.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,4 +351,14 @@ def test_generate_menu_selected_related_views_submenu(self):
351351
self.assertEqual(len(nav), 1)
352352
self.assertEqual(nav[0]["selected"], True)
353353
self.assertEqual(nav[0]["submenu"][0]["selected"], True)
354-
self.assertEqual(nav[0]["submenu"][1]["selected"], False)
354+
self.assertEqual(nav[0]["submenu"][1]["selected"], False)
355+
356+
def test_subsequent_requests(self):
357+
self.request.user = TestUser(authenticated=True)
358+
ctx = {
359+
'request': self.request
360+
}
361+
nav1 = get_menu(ctx, 'NAV_MENU')
362+
nav2 = get_menu(ctx, 'NAV_MENU')
363+
# Both menus should be equal
364+
self.assertEqual(nav1, nav2)

0 commit comments

Comments
 (0)