有没有办法让所有模块都在层次结构中的特定模块下?

2024-04-19 06:06:53 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以直接在层次结构中的指定模型下面列出所有python模块?你知道吗

我有一个Django web应用程序正在慢慢发展,我根据这篇文章重新组织了它:

http://paltman.com/2008/01/29/breaking-apart-models-in-django/

但是,我正在尝试改进他的技术,通过使用模块初始化文件(\uuinit\uuy.py)中的内省来自动检测从属作业中Django模型类的所有实例。我已经做到了这一点,但它仍然需要一个静态的模块列表在上面的树工作。你知道吗

如果有人感兴趣,我的解决方案如下:

from django.db.models.base import ModelBase
from sys import modules

moduleList = ['TechTree', 'PilotAbilities']
__all__ = []

for moduleName in moduleList:
  fullyQualifiedModuleName = '%s.%s' % (__name__, moduleName)
  moduleObj = __import__(fullyQualifiedModuleName)

  __all__ += [item for item in dir(moduleObj) if isinstance(getattr(moduleObj, item), ModelBase)]

Tags: 模块djangoinfrom模型importformodels
2条回答

嗯,您可以获取os.path.dirname(parent.__file__),然后glob.glob()os.walk(),然后查找其他init.py文件。你知道吗

这只是一种尝试,但似乎奏效了。我运行的是python2.7.1,dir(somemodule)提供了所有相关的模块。使用openpyxl和os模块进行测试。你知道吗

def import_all(name):
    __import__(name)
    for i in dir(name):
        try:
            if type(i) == type(name):
                import_all(name+'.'+i)
        except:
            pass

注: 这可能是非常不和谐和气馁,但它似乎工作。你知道吗

注2: 那是因为我不小心用了“openpyxl”(我正在使用的一个测试)而不是列表子模块。对不起

相关问题 更多 >