如何使用字符串访问 python 模块变量 [django]
Posted
技术标签:
【中文标题】如何使用字符串访问 python 模块变量 [django]【英文标题】:How to access a python module variable using a string [ django ] 【发布时间】:2011-10-30 14:55:21 【问题描述】:我有一个 django 应用程序,带有一个名为 "app" 的模块 现在这个模块有一个名为 "urls.py" 的文件,其中有一个名为 "HOME_URL"
的变量我想做什么?
app_label = "app"
url = __import__(app_label).urls.HOME_URL
print url
这显然行不通,但我希望你能得到我想要做的事情,如果没有,请发表评论,我将编辑问题以包含更多信息。
【问题讨论】:
这在一般情况下对我有用。您会收到什么样的错误消息? 【参考方案1】:如果您使用的是 Django 1.7+,则应改用 import_string
。
from django.utils.module_loading import import_string
app_label = "app"
url = import_string("%s.urls.HOME_URL" % app_label)
顺便说一下,关于 Python 模块和包的一些说明。
包 是一个包含文件的文件夹,其中包括一个名为__init__.py
的文件。听起来你的“应用程序”“模块”实际上是一个包。
module 是包中的.py
文件。所以你的urls.py
实际上是一个模块。
【讨论】:
【参考方案2】:您可以使用import_module
加载相对于 django 项目根目录的模块。
from django.utils.importlib import import_module
app_label = "app"
url = import_module("%s.urls" % app_label).HOME_URL
这应该可以在您的 django 项目或./manage.py shell
中使用。
【讨论】:
在 Django 1.11 中,这会导致ImportError: No module named importlib
;知道这个助手已经移动到哪里或者它是否还在那里?
如果遇到@KurtPeek 提到的导入错误,请使用 Python import_module:from importlib import import_module
在 Django 1.11 中:从 django.utils 导入模块加载以上是关于如何使用字符串访问 python 模块变量 [django]的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中,如何从导入的模块访问主模块的命名空间?
ImportError:导入 dj_database_url ImportError:没有名为“dj_database_url”的模块