0

我有一个包裹:

urls/
    __init__.py
    dev_urls.py
    prod_urls.py

这个urls包在一个应用程序api中,在我的 main 中urls.py

...
url(r'^api/v1/', include('apps.api.urls')),
...

我知道如果我将其添加到urls.__init__.py文件中:

# __init__.py
from dev_urls import *

Django 将运行,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'

现在,问题来了:我该怎么做:

from <name> import *

这可能吗?

4

2 回答 2

1

不,您不能在不更改文件名的情况下更改您导入的名称,__name__您可能正在考虑的属性是由您导入它的方式设置的。您需要按照 John 的建议使用自定义导入(请参阅此处导入 *)或修改包含的路径,如下所示

...
url(r'^api/v1/', include('apps.api.urls.' + settings.URLS_ENV + '_urls')),
..
于 2017-01-20T17:49:22.313 回答
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
于 2017-01-20T22:46:21.673 回答