mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Merge pull request #8473 from netbox-community/6221-pluginviews
Closes #8472: Make view name resolution plugin-safe
This commit is contained in:
@ -10,7 +10,7 @@ from django.utils.safestring import mark_safe
|
||||
from django_tables2.utils import Accessor
|
||||
|
||||
from extras.choices import CustomFieldTypeChoices
|
||||
from utilities.utils import content_type_identifier, content_type_name
|
||||
from utilities.utils import content_type_identifier, content_type_name, resolve_namespace
|
||||
|
||||
__all__ = (
|
||||
'ActionsColumn',
|
||||
@ -134,7 +134,7 @@ class ActionsColumn(tables.Column):
|
||||
return ''
|
||||
|
||||
model = table.Meta.model
|
||||
viewname_base = f'{model._meta.app_label}:{model._meta.model_name}'
|
||||
viewname_base = f'{resolve_namespace(model)}:{model._meta.model_name}'
|
||||
request = getattr(table, 'context', {}).get('request')
|
||||
url_appendix = f'?return_url={request.path}' if request else ''
|
||||
|
||||
|
@ -16,9 +16,10 @@ from django.utils.safestring import mark_safe
|
||||
from markdown import markdown
|
||||
|
||||
from netbox.config import get_config
|
||||
from netbox.settings import PLUGINS
|
||||
from utilities.forms import get_selected_values, TableConfigForm
|
||||
from utilities.markdown import StrikethroughExtension
|
||||
from utilities.utils import foreground_color
|
||||
from utilities.utils import foreground_color, resolve_namespace
|
||||
|
||||
register = template.Library()
|
||||
|
||||
@ -115,7 +116,8 @@ def viewname(model, action):
|
||||
"""
|
||||
Return the view name for the given model and action. Does not perform any validation.
|
||||
"""
|
||||
return f'{model._meta.app_label}:{model._meta.model_name}_{action}'
|
||||
namespace = resolve_namespace(model)
|
||||
return f'{namespace}:{model._meta.model_name}_{action}'
|
||||
|
||||
|
||||
@register.filter()
|
||||
@ -123,7 +125,8 @@ def validated_viewname(model, action):
|
||||
"""
|
||||
Return the view name for the given model and action if valid, or None if invalid.
|
||||
"""
|
||||
viewname = f'{model._meta.app_label}:{model._meta.model_name}_{action}'
|
||||
namespace = resolve_namespace(model)
|
||||
viewname = f'{namespace}:{model._meta.model_name}_{action}'
|
||||
try:
|
||||
# Validate and return the view name. We don't return the actual URL yet because many of the templates
|
||||
# are written to pass a name to {% url %}.
|
||||
|
@ -13,10 +13,20 @@ from jinja2.sandbox import SandboxedEnvironment
|
||||
from mptt.models import MPTTModel
|
||||
|
||||
from dcim.choices import CableLengthUnitChoices
|
||||
from extras.plugins import PluginConfig
|
||||
from extras.utils import is_taggable
|
||||
from utilities.constants import HTTP_REQUEST_META_SAFE_COPY
|
||||
|
||||
|
||||
def resolve_namespace(instance):
|
||||
"""
|
||||
Get the appropriate namepsace for the app based on whether it is a Plugin or base application
|
||||
"""
|
||||
if isinstance(instance._meta.app_config, PluginConfig):
|
||||
return f'plugins:{instance._meta.app_label}'
|
||||
return f'{instance._meta.app_label}'
|
||||
|
||||
|
||||
def csv_format(data):
|
||||
"""
|
||||
Encapsulate any data which contains a comma within double quotes.
|
||||
|
Reference in New Issue
Block a user