mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-29 11:56:25 -06:00
Extend register_model_view() to enable registering list views
This commit is contained in:
parent
9fe6685562
commit
48cce3e5df
@ -9,22 +9,27 @@ __all__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_model_urls(app_label, model_name):
|
def get_model_urls(app_label, model_name, detail=True):
|
||||||
"""
|
"""
|
||||||
Return a list of URL paths for detail views registered to the given model.
|
Return a list of URL paths for detail views registered to the given model.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
app_label: App/plugin name
|
app_label: App/plugin name
|
||||||
model_name: Model name
|
model_name: Model name
|
||||||
|
detail: If True (default), return only URL views for an individual object.
|
||||||
|
Otherwise, return only list views.
|
||||||
"""
|
"""
|
||||||
paths = []
|
paths = []
|
||||||
|
|
||||||
# Retrieve registered views for this model
|
# Retrieve registered views for this model
|
||||||
try:
|
try:
|
||||||
views = registry['views'][app_label][model_name]
|
views = [
|
||||||
|
view for view in registry['views'][app_label][model_name]
|
||||||
|
if view['detail'] == detail
|
||||||
|
]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
# No views have been registered for this model
|
# No views have been registered for this model
|
||||||
views = []
|
return []
|
||||||
|
|
||||||
for config in views:
|
for config in views:
|
||||||
# Import the view class or function
|
# Import the view class or function
|
||||||
|
@ -272,7 +272,7 @@ def get_viewname(model, action=None, rest_api=False):
|
|||||||
return viewname
|
return viewname
|
||||||
|
|
||||||
|
|
||||||
def register_model_view(model, name='', path=None, kwargs=None):
|
def register_model_view(model, name='', path=None, detail=True, kwargs=None):
|
||||||
"""
|
"""
|
||||||
This decorator can be used to "attach" a view to any model in NetBox. This is typically used to inject
|
This decorator can be used to "attach" a view to any model in NetBox. This is typically used to inject
|
||||||
additional tabs within a model's detail view. For example, to add a custom tab to NetBox's dcim.Site model:
|
additional tabs within a model's detail view. For example, to add a custom tab to NetBox's dcim.Site model:
|
||||||
@ -289,6 +289,7 @@ def register_model_view(model, name='', path=None, kwargs=None):
|
|||||||
name: The string used to form the view's name for URL resolution (e.g. via `reverse()`). This will be appended
|
name: The string used to form the view's name for URL resolution (e.g. via `reverse()`). This will be appended
|
||||||
to the name of the base view for the model using an underscore. If blank, the model name will be used.
|
to the name of the base view for the model using an underscore. If blank, the model name will be used.
|
||||||
path: The URL path by which the view can be reached (optional). If not provided, `name` will be used.
|
path: The URL path by which the view can be reached (optional). If not provided, `name` will be used.
|
||||||
|
detail: True if the path applied to an individual object; False if it attaches to the base (list) path.
|
||||||
kwargs: A dictionary of keyword arguments for the view to include when registering its URL path (optional).
|
kwargs: A dictionary of keyword arguments for the view to include when registering its URL path (optional).
|
||||||
"""
|
"""
|
||||||
def _wrapper(cls):
|
def _wrapper(cls):
|
||||||
@ -301,7 +302,8 @@ def register_model_view(model, name='', path=None, kwargs=None):
|
|||||||
registry['views'][app_label][model_name].append({
|
registry['views'][app_label][model_name].append({
|
||||||
'name': name,
|
'name': name,
|
||||||
'view': cls,
|
'view': cls,
|
||||||
'path': path or name,
|
'path': path if path is not None else name,
|
||||||
|
'detail': detail,
|
||||||
'kwargs': kwargs or {},
|
'kwargs': kwargs or {},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user