Files
netbox/netbox/utilities/urls.py
Jeremy Stretch a0b4b0afe0 Closes #18023: Employ register_model_view() for list views (#18029)
* Extend register_model_view() to enable registering list views

* Register circuits list views with register_model_view()

* Register core list views with register_model_view()

* Fix bulk_edit & bulk_delete URL paths

* Register dcim list views with register_model_view() (WIP)

* Register dcim list views with register_model_view()

* Register extras list views with register_model_view()

* Register ipam list views with register_model_view()

* Register tenancy list views with register_model_view()

* Register users list views with register_model_view()

* Register virtualization list views with register_model_view()

* Register vpn list views with register_model_view()

* Register wireless list views with register_model_view()

* Add change note for register_model_view()
2024-11-20 15:54:37 -05:00

51 lines
1.4 KiB
Python

from django.urls import path
from django.utils.module_loading import import_string
from django.views.generic import View
from netbox.registry import registry
__all__ = (
'get_model_urls',
)
def get_model_urls(app_label, model_name, detail=True):
"""
Return a list of URL paths for detail views registered to the given model.
Args:
app_label: App/plugin name
model_name: Model name
detail: If True (default), return only URL views for an individual object.
Otherwise, return only list views.
"""
paths = []
# Retrieve registered views for this model
try:
views = [
view for view in registry['views'][app_label][model_name]
if view['detail'] == detail
]
except KeyError:
# No views have been registered for this model
return []
for config in views:
# Import the view class or function
if type(config['view']) is str:
view_ = import_string(config['view'])
else:
view_ = config['view']
if issubclass(view_, View):
view_ = view_.as_view()
# Create a path to the view
name = f"{model_name}_{config['name']}" if config['name'] else model_name
url_path = f"{config['path']}/" if config['path'] else ''
paths.append(
path(url_path, view_, name=name, kwargs=config['kwargs'])
)
return paths