diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index 399b3c18476..8a67505c03b 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -4,6 +4,7 @@ import django_tables2 as tables from django.conf import settings +from django.contrib.auth.context_processors import auth from django.contrib.auth.models import AnonymousUser from django.db.models import DateField, DateTimeField from django.template import Context, Template @@ -510,25 +511,32 @@ def __init__(self, customlink, *args, **kwargs): super().__init__(*args, **kwargs) - def render(self, record): - try: - rendered = self.customlink.render({ - 'object': record, - 'obj': record, # TODO: Remove in NetBox v3.5 + def _render_customlink(self, record, table): + context = { + 'object': record, + 'obj': record, # TODO: Remove in NetBox v3.5 + 'debug': settings.DEBUG, + } + if request := getattr(table, 'context', {}).get('request'): + # If the request is available, include it as context + context.update({ + 'request': request, + **auth(request), }) - if rendered: + + return self.customlink.render(context) + + def render(self, record, table, **kwargs): + try: + if rendered := self._render_customlink(record, table): return mark_safe(f'{rendered["text"]}') except Exception as e: return mark_safe(f' Error') return '' - def value(self, record): + def value(self, record, table, **kwargs): try: - rendered = self.customlink.render({ - 'object': record, - 'obj': record, # TODO: Remove in NetBox v3.5 - }) - if rendered: + if rendered := self._render_customlink(record, table): return rendered['link'] except Exception: pass