diff --git a/netbox/netbox/plugins/navigation.py b/netbox/netbox/plugins/navigation.py index fc86b134adb..35c9fa0621f 100644 --- a/netbox/netbox/plugins/navigation.py +++ b/netbox/netbox/plugins/navigation.py @@ -32,15 +32,19 @@ class PluginMenuItem: This class represents a navigation menu item. This constitutes primary link and its text, but also allows for specifying additional link buttons that appear to the right of the item in the van menu. - Links are specified as Django reverse URL strings. + Links are specified as Django reverse URL strings suitable for rendering via {% url item.link %}. + Alternatively, a pre-generated url can be specified which will be rendered literally. Buttons are each specified as a list of PluginMenuButton instances. """ permissions = [] buttons = [] - def __init__(self, link, link_text, auth_required=False, staff_only=False, permissions=None, buttons=None): + def __init__( + self, link, link_text, url=None, auth_required=False, staff_only=False, permissions=None, buttons=None + ): self.link = link self.link_text = link_text + self.url = url self.auth_required = auth_required self.staff_only = staff_only if permissions is not None: @@ -61,10 +65,11 @@ class PluginMenuButton: color = ButtonColorChoices.DEFAULT permissions = [] - def __init__(self, link, title, icon_class, color=None, permissions=None): + def __init__(self, link, title, icon_class, url=None, color=None, permissions=None): self.link = link self.title = title self.icon_class = icon_class + self.url = url if permissions is not None: if type(permissions) not in (list, tuple): raise TypeError(_("Permissions must be passed as a tuple or list.")) diff --git a/netbox/utilities/templates/navigation/menu.html b/netbox/utilities/templates/navigation/menu.html index 3983915dfb2..97861857eb6 100644 --- a/netbox/utilities/templates/navigation/menu.html +++ b/netbox/utilities/templates/navigation/menu.html @@ -41,11 +41,11 @@ {% for item, buttons in items %}