首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >扫描Django应用模块

扫描Django应用模块
EN

Stack Overflow用户
提问于 2014-10-07 00:18:06
回答 2查看 472关注 0票数 0

我正在开发一个新的类,为django应用程序添加一些功能,并且需要扫描/收集从这个类继承的每个类。我已经准备好了在我导入的特定模块中扫描它们,但是我想知道最好的方法是扫描我的每个应用程序中的特定文件(只是我定义的那个)?我知道其他一些应用程序也会这样做,很明显django自己也会这么做。我也许可以一起破解一些东西来扫描文件系统,但是我想知道是否有更好的/通用的方法来解决这个问题?关于这件事我找不到多少。

我总是可以在一个包中定义类,但由于它们与应用程序绑定在一起,所以我认为最好在每个应用程序中定义它们,而不是从各地导入模型。

所需接口示例:

代码语言:javascript
复制
def get_app_implementations(module_name):
     # ... What's the least hacky way to get each of the app packages?
     # in a way that they can be imported using __import__ or the likes
     results = []
     for package in packages:
         try:
             scanned = __import__("{0}.{1}".format(package,module_name))
             results.append(scanned)
         except ImportError:
             pass
     return results
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-07 06:42:54

你可能会考虑另一种方法。与其通过扫描模型来查找相关的模型,不如让模型本身通过使用元类将自己注册到系统中。马蒂·阿尔钦有一个很好的例子,说明了一种简单的方法。

票数 2
EN

Stack Overflow用户

发布于 2014-10-07 00:46:51

虽然我仍然很好奇是否有更好的解决方案,但下面的内容似乎能满足我的需求。

代码语言:javascript
复制
#loader.py
from django.conf import settings
import importlib

def load_from_apps(name):

    results = []
    for app in settings.CUSTOM_APPS:
        try:
            scanned = importlib.import_module("{0}.{1}".format(app, name))
            results.append(scanned)
        except ImportError:
            pass
    return results



#settings.py
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

CUSTOM_APPS = (
    'CustomApp1',
    'CustomApp2'
)

INSTALLED_APPS += CUSTOM_APPS
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26226749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档