从动态文件导入所有(*)

时间:2017-01-20 16:26:20

标签: python django django-urls python-import import-module

我有一个包裹:

PersonFactory

urls/ __init__.py dev_urls.py prod_urls.py 个包位于应用urls和我的主api中:

urls.py

我知道如果我将其添加到... url(r'^api/v1/', include('apps.api.urls')), ... 文件:

urls.__init__.py

Django将# __init__.py from dev_urls import * 包括dev_urls.py

但是我想通过在我的设置模块中添加一个变量来实现这种动态:

apps.api.urls

然后在我的# settings URLS_ENV = 'dev' # This could be 'prod'

urls.__init__.py

现在,问题是:我怎么能做如下的事情:

# __init__.py
from django.conf import settings
name = settings.URLS_ENV + '_urls'

这可能吗?

2 个答案:

答案 0 :(得分:1)

不,您无法在不更改文件名的情况下更改导入的名称,您可能会考虑的__name__属性是由导入方式设置的。您需要使用John建议的自定义导入(see here to import *)或修改包含的路径,如下所示

...
url(r'^api/v1/', include('apps.api.urls.' + settings.URLS_ENV + '_urls')),
..

答案 1 :(得分:1)

我找到了这个答案https://stackoverflow.com/a/301139/3945375

这对我有用,现在正在运行:

# urls.__init__.py

from django.conf import settings

mod = settings.URL_ENVIRONMENT + '_urls'
exec 'from %s import *' % mod