Quellcode durchsuchen

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

Jeremy Stretch vor 2 Jahren
Ursprung
Commit
d79fa131bb
1 geänderte Dateien mit 20 neuen und 12 gelöschten Zeilen
  1. 20 12
      netbox/netbox/tables/columns.py

+ 20 - 12
netbox/netbox/tables/columns.py

@@ -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):
-        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'<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({
-                'object': record,
-                'obj': record,  # TODO: Remove in NetBox v3.5
-            })
-            if rendered:
+            if rendered := self._render_customlink(record, table):
                 return rendered['link']
                 return rendered['link']
         except Exception:
         except Exception:
             pass
             pass