Skip to content

Commit 20b28c6

Browse files
committed
Implement related views
1 parent e0d733a commit 20b28c6

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

menu_generator/menu.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
from .utils import get_callable, parse_url
66

77
if django.VERSION >= (1, 10): # pragma: no cover
8-
from django.urls import reverse, NoReverseMatch
8+
from django.urls import resolve, reverse, NoReverseMatch
99
else:
10-
from django.core.urlresolvers import reverse, NoReverseMatch
10+
from django.core.urlresolvers import resolve, reverse, NoReverseMatch
1111

1212

1313
class MenuBase(object):
@@ -83,12 +83,20 @@ def _get_related_urls(self, item_dict):
8383
related_urls = item_dict.get('related_urls', [])
8484
return [parse_url(url) for url in related_urls]
8585

86+
def _get_related_views(self, item_dict):
87+
"""
88+
Given a menu item dictionary, it returns the relateds viewss or an empty list.
89+
"""
90+
related_views = item_dict.get('related_views', [])
91+
return related_views
92+
8693
def _is_selected(self, item_dict):
8794
"""
8895
Given a menu item dictionary, it returns true if `url` is on path,
8996
unless the item is marked as a root, in which case returns true if `url` is part of path.
9097
9198
If related URLS are given, it also returns true if one of the related URLS is part of path.
99+
If related views are given, it also returns true if the path maps to one of these views.
92100
"""
93101
url = self._get_url(item_dict)
94102
if self._is_root(item_dict) and url in self.path:
@@ -100,6 +108,9 @@ def _is_selected(self, item_dict):
100108
for related_url in self._get_related_urls(item_dict):
101109
if related_url in self.path:
102110
return True
111+
# Resolve URL and check if it relates to a related views
112+
if resolve(self.path).func in self._get_related_views(item_dict):
113+
return True
103114
return False
104115

105116
def _is_root(self, item_dict):

0 commit comments

Comments
 (0)