فهرست منبع

Fixes #10982: Catch NoReverseMatch exception when rendering tabs with no registered URL

jeremystretch 3 سال پیش
والد
کامیت
e494d7bb22
2فایلهای تغییر یافته به همراه8 افزوده شده و 1 حذف شده
  1. 1 0
      docs/release-notes/version-3.4.md
  2. 7 1
      netbox/utilities/templatetags/tabs.py

+ 1 - 0
docs/release-notes/version-3.4.md

@@ -13,6 +13,7 @@
 * [#10957](https://github.com/netbox-community/netbox/issues/10957) - Add missing VDCs column to interface tables
 * [#10957](https://github.com/netbox-community/netbox/issues/10957) - Add missing VDCs column to interface tables
 * [#10973](https://github.com/netbox-community/netbox/issues/10973) - Fix device links in VDC table
 * [#10973](https://github.com/netbox-community/netbox/issues/10973) - Fix device links in VDC table
 * [#10980](https://github.com/netbox-community/netbox/issues/10980) - Fix view tabs for plugin objects
 * [#10980](https://github.com/netbox-community/netbox/issues/10980) - Fix view tabs for plugin objects
+* [#10982](https://github.com/netbox-community/netbox/issues/10982) - Catch `NoReverseMatch` exception when rendering tabs with no registered URL
 
 
 ## v3.4-beta1 (2022-11-16)
 ## v3.4-beta1 (2022-11-16)
 
 

+ 7 - 1
netbox/utilities/templatetags/tabs.py

@@ -1,5 +1,6 @@
 from django import template
 from django import template
 from django.urls import reverse
 from django.urls import reverse
+from django.urls.exceptions import NoReverseMatch
 from django.utils.module_loading import import_string
 from django.utils.module_loading import import_string
 
 
 from netbox.registry import registry
 from netbox.registry import registry
@@ -36,9 +37,14 @@ def model_view_tabs(context, instance):
             if attrs := tab.render(instance):
             if attrs := tab.render(instance):
                 viewname = get_viewname(instance, action=config['name'])
                 viewname = get_viewname(instance, action=config['name'])
                 active_tab = context.get('tab')
                 active_tab = context.get('tab')
+                try:
+                    url = reverse(viewname, args=[instance.pk])
+                except NoReverseMatch:
+                    # No URL has been registered for this view; skip
+                    continue
                 tabs.append({
                 tabs.append({
                     'name': config['name'],
                     'name': config['name'],
-                    'url': reverse(viewname, args=[instance.pk]),
+                    'url': url,
                     'label': attrs['label'],
                     'label': attrs['label'],
                     'badge': attrs['badge'],
                     'badge': attrs['badge'],
                     'is_active': active_tab and active_tab == tab,
                     'is_active': active_tab and active_tab == tab,