如何使用字符串访问Python模块变量 [ django ]

14 投票
2 回答
6832 浏览
提问于 2025-04-16 23:57

我有一个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 这个命令行工具里使用。

撰写回答