urls.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from django.apps import apps
  2. from django.conf import settings
  3. from django.conf.urls import include
  4. from django.contrib.admin.views.decorators import staff_member_required
  5. from django.urls import path
  6. from extras.plugins.utils import import_object
  7. from . import views
  8. # Initialize URL base, API, and admin URL patterns for plugins
  9. plugin_patterns = []
  10. plugin_api_patterns = [
  11. path('', views.PluginsAPIRootView.as_view(), name='api-root'),
  12. path('installed-plugins/', views.InstalledPluginsAPIView.as_view(), name='plugins-list')
  13. ]
  14. plugin_admin_patterns = [
  15. path('installed-plugins/', staff_member_required(views.InstalledPluginsAdminView.as_view()), name='plugins_list')
  16. ]
  17. # Register base/API URL patterns for each plugin
  18. for plugin_path in settings.PLUGINS:
  19. plugin_name = plugin_path.split('.')[-1]
  20. app = apps.get_app_config(plugin_name)
  21. base_url = getattr(app, 'base_url') or app.label
  22. # Check if the plugin specifies any base URLs
  23. urlpatterns = import_object(f"{plugin_path}.urls.urlpatterns")
  24. if urlpatterns is not None:
  25. plugin_patterns.append(
  26. path(f"{base_url}/", include((urlpatterns, app.label)))
  27. )
  28. # Check if the plugin specifies any API URLs
  29. urlpatterns = import_object(f"{plugin_path}.api.urls.urlpatterns")
  30. if urlpatterns is not None:
  31. plugin_api_patterns.append(
  32. path(f"{base_url}/", include((urlpatterns, f"{app.label}-api")))
  33. )