diff --git a/netbox/templates/ui/exception.html b/netbox/templates/ui/exception.html
new file mode 100644
index 000000000..a777b0b5e
--- /dev/null
+++ b/netbox/templates/ui/exception.html
@@ -0,0 +1,12 @@
+{% load i18n %}
+
+
+
+
+
+
+ {% blocktrans %}An error occurred when loading content from plugin {{ plugin }}:{% endblocktrans %}
+
+
{{ exception }}
+
+
diff --git a/netbox/utilities/templatetags/plugins.py b/netbox/utilities/templatetags/plugins.py
index 40e6b8196..c3157d119 100644
--- a/netbox/utilities/templatetags/plugins.py
+++ b/netbox/utilities/templatetags/plugins.py
@@ -1,5 +1,6 @@
from django import template as template_
from django.conf import settings
+from django.template.loader import render_to_string
from django.utils.safestring import mark_safe
from netbox.plugins import PluginTemplateExtension
@@ -38,8 +39,11 @@ def _get_registered_content(obj, method, template_context):
context['config'] = settings.PLUGINS_CONFIG.get(plugin_name, {})
# Call the method to render content
- instance = template_extension(context)
- content = getattr(instance, method)()
+ try:
+ instance = template_extension(context)
+ content = getattr(instance, method)()
+ except Exception as e:
+ content = render_to_string('ui/exception.html', {'plugin': plugin_name, 'exception': repr(e)})
html += content
return mark_safe(html)