Я пытаюсь написать некоторый код для динамического импорта приложения «plugin-like» в моем проекте django. Я использую Django 1.10Динамически импортировать url в Django дает объект 'str' не вызываемый
Я подклассы в django.apps.AppConfig
класс и использовать его для обозначения плагинов:
from django.apps import AppConfig
class AutomationAppConfig(AppConfig):
def get_url(self):
return self.name
тогда, в моем проекте основного urls.py я добавил этот код после основного «статических» urlpatterns initializazion:
...
from slae.util import AutomationAppConfig
from django.apps import apps
for module in iter(apps.get_app_configs()):
if isinstance(module, AutomationAppConfig):
url = module.get_url()
urlpatterns.append(url(r'^%s/' % url, include('%s.urls' % module.name), name = module.name))
, но он дает следующую ошибку, когда сервер (ре) загружает
...
File "/cygdrive/d/workspaces/non-ide/slae/slae/urls.py", line 47, in <module>
urlpatterns.append(url(r'^%s/' % url, include('%s.urls' % module.name), name = module.name))
TypeError: 'str' object is not callable
То, что я не понимаю, что с помощью этого кода вместо этого он работает отлично:
from slae.util import AutomationAppConfig
from . import settings
from django.utils.module_loading import import_string
import inspect
for app in settings.INSTALLED_APPS:
try:
module = import_string(app)
except:
pass
else:
if inspect.isclass(module) and issubclass(module, AutomationAppConfig):
urlpatterns.append(url(r'^%s/' % module.name, include('%s.urls' % module.name), name = module.name))
Что мне не хватает?
спасибо! Я был уверен, что это было тривиально, я просто не мог этого видеть ... Я чувствую себя глупым XD – Antiphon0x