urls.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from django.urls import path
  2. from django.utils.module_loading import import_string
  3. from django.views.generic import View
  4. from netbox.registry import registry
  5. __all__ = (
  6. 'get_model_urls',
  7. )
  8. def get_model_urls(app_label, model_name):
  9. """
  10. Return a list of URL paths for detail views registered to the given model.
  11. Args:
  12. app_label: App/plugin name
  13. model_name: Model name
  14. """
  15. paths = []
  16. # Retrieve registered views for this model
  17. try:
  18. views = registry['views'][app_label][model_name]
  19. except KeyError:
  20. # No views have been registered for this model
  21. views = []
  22. for config in views:
  23. # Import the view class or function
  24. if type(config['view']) is str:
  25. view_ = import_string(config['view'])
  26. else:
  27. view_ = config['view']
  28. if issubclass(view_, View):
  29. view_ = view_.as_view()
  30. # Create a path to the view
  31. name = f"{model_name}_{config['name']}" if config['name'] else model_name
  32. url_path = f"{config['path']}/" if config['path'] else ''
  33. paths.append(
  34. path(url_path, view_, name=name, kwargs=config['kwargs'])
  35. )
  36. return paths