Catch exceptions raised when rendering embedded plugin content

This commit is contained in:
Jeremy Stretch
2026-04-02 11:08:04 -04:00
parent b91dc1243b
commit aeef559c0b
2 changed files with 18 additions and 2 deletions

View File

@@ -0,0 +1,12 @@
{% load i18n %}
<div class="alert alert-danger" role="alert">
<div class="alert-icon">
<i class="mdi mdi-alert"></i>
</div>
<div>
<p>
{% blocktrans %}An error occurred when loading content from plugin {{ plugin }}:{% endblocktrans %}
</p>
<pre class="p-0">{{ exception }}</pre>
</div>
</div>

View File

@@ -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)