def ready(self): # Register template content template_extensions = import_object( f"{self.__module__}.{self.template_extensions}") if template_extensions is not None: register_template_extensions(template_extensions) # Register navigation menu items (if defined) menu_items = import_object(f"{self.__module__}.{self.menu_items}") if menu_items is not None: register_menu_items(self.verbose_name, menu_items)
def _get_plugin_entry(plugin, app_config, request, format): # Check if the plugin specifies any API URLs api_app_name = import_object(f"{plugin}.api.urls.app_name") if api_app_name is None: # Plugin does not expose an API return None try: entry = (getattr(app_config, 'base_url', app_config.label), reverse( f"plugins-api:{api_app_name}:api-root", request=request, format=format )) except NoReverseMatch: # The plugin does not include an api-root url entry = None return entry
plugin_patterns = [] plugin_api_patterns = [ path('', views.PluginsAPIRootView.as_view(), name='api-root'), path('installed-plugins/', views.InstalledPluginsAPIView.as_view(), name='plugins-list') ] plugin_admin_patterns = [ path('installed-plugins/', staff_member_required(views.InstalledPluginsAdminView.as_view()), name='plugins_list') ] # Register base/API URL patterns for each plugin for plugin_path in settings.PLUGINS: plugin_name = plugin_path.split('.')[-1] app = apps.get_app_config(plugin_name) base_url = getattr(app, 'base_url') or app.label # Check if the plugin specifies any base URLs urlpatterns = import_object(f"{plugin_path}.urls.urlpatterns") if urlpatterns is not None: plugin_patterns.append( path(f"{base_url}/", include((urlpatterns, app.label)))) # Check if the plugin specifies any API URLs urlpatterns = import_object(f"{plugin_path}.api.urls.urlpatterns") if urlpatterns is not None: plugin_api_patterns.append( path(f"{base_url}/", include((urlpatterns, f"{app.label}-api"))))