1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Closes #13415: Pass request context when rendering custom links in a table column

This commit is contained in:
Jeremy Stretch
2023-08-24 15:54:16 -04:00
parent be2b24a155
commit d79fa131bb

View File

@ -4,6 +4,7 @@ from urllib.parse import quote
import django_tables2 as tables import django_tables2 as tables
from django.conf import settings from django.conf import settings
from django.contrib.auth.context_processors import auth
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.db.models import DateField, DateTimeField from django.db.models import DateField, DateTimeField
from django.template import Context, Template from django.template import Context, Template
@ -510,25 +511,32 @@ class CustomLinkColumn(tables.Column):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def render(self, record): def _render_customlink(self, record, table):
try: context = {
rendered = self.customlink.render({
'object': record, 'object': record,
'obj': record, # TODO: Remove in NetBox v3.5 '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'<a href="{rendered["link"]}"{rendered["link_target"]}>{rendered["text"]}</a>') return mark_safe(f'<a href="{rendered["link"]}"{rendered["link_target"]}>{rendered["text"]}</a>')
except Exception as e: except Exception as e:
return mark_safe(f'<span class="text-danger" title="{e}"><i class="mdi mdi-alert"></i> Error</span>') return mark_safe(f'<span class="text-danger" title="{e}"><i class="mdi mdi-alert"></i> Error</span>')
return '' return ''
def value(self, record): def value(self, record, table, **kwargs):
try: try:
rendered = self.customlink.render({ if rendered := self._render_customlink(record, table):
'object': record,
'obj': record, # TODO: Remove in NetBox v3.5
})
if rendered:
return rendered['link'] return rendered['link']
except Exception: except Exception:
pass pass