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:
@ -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
|
||||||
|
Reference in New Issue
Block a user