【问题标题】:Import all (*) from dynamic file从动态文件中导入所有 (*)
【发布时间】:2017-01-20 16:26:19
【问题描述】:

我有一个包裹:

urls/
    __init__.py
    dev_urls.py
    prod_urls.py

这个urls 包在一个应用程序api 和我的主要urls.py 中:

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

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

# __init__.py
from dev_urls import *

Django 将运行,包括 dev_urls.pyapps.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 *

这可能吗?

【问题讨论】:

  • 不完全是重复但可能有足够的信息来回答:stackoverflow.com/q/301134/4996248
  • @JohnColeman 我已经阅读了那个答案。感谢。请注意,我想要的是使用 __init__.py 获得将 apps.api.urls.dev_urls.py 导入为 apps.api.urls 的功能。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    这对我有用,正在运行:

    # urls.__init__.py
    
    from django.conf import settings
    
    mod = settings.URL_ENVIRONMENT + '_urls'
    exec 'from %s import *' % mod
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 2011-05-06
      • 2020-01-12
      • 2018-05-13
      • 2019-06-25
      • 2017-04-26
      • 1970-01-01
      相关资源
      最近更新 更多