urls.py 1.2 KB

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