1
我正在嘗試編寫一些代碼來在我的django項目中動態地導入「類似插件」的應用程序。我使用Django 1.10在Django中動態導入url給'str'對象不可調用
我子類的django.apps.AppConfig
類,並用它來標記插件:
from django.apps import AppConfig
class AutomationAppConfig(AppConfig):
def get_url(self):
return self.name
然後,在我的項目主要urls.py我加入這個代碼的主「靜」 URL模式後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