如何使用字符串访问Python模块变量 [ django ]
我有一个Django应用程序,里面有一个模块叫"app"
这个模块里有一个文件叫"urls.py",里面有一个变量叫"HOME_URL"
我想要做的事情是?
app_label = "app"
url = __import__(app_label).urls.HOME_URL
print url
这显然是行不通的,但我希望你能明白我想做的事情。如果不明白,请留言,我会修改问题,提供更多信息。
2 个回答
17
如果你在使用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
。所以你说的“应用程序”的“模块”其实是一个包。
模块是包里面的一个.py
文件。所以你的urls.py
实际上是一个模块。
10
你可以使用 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
这个命令行工具里使用。