在Django init

时间:2017-02-09 19:40:34

标签: python django startup

我有一堆应用,可能包含也可能不包含名为activity.py的文件。该文件基本上记录模型信号。当我在ready类的AppConfig方法中导入此文件时,它运行良好。问题是我有十几个应用程序,所以我不想在我的所有应用程序中使用相同的方法:

def ready(self):
    # register signal for activity feed
    from . import activity

我想运行一个通过INSTALLED_APPS数组的脚本,如果此应用包含文件activity.py,请将其导入。
我无法找到一种方法来运行一个函数,以便在所有应用程序准备好之后,以及服务器正在收听之前。

2 个答案:

答案 0 :(得分:1)

您可以做的一件事是创建另一个应用程序,其唯一目的是执行初始化并将其放在INSTALLED_APPS中。在该应用中,子类AppConfig并覆盖AppConfig.ready()方法。

答案 1 :(得分:0)

您可以尝试使用以下方法:

from django.conf import settings
from importlib import import_module

for app in settings.INSTALLED_APPS:
    module_name = '%s.%s' % (app, "activity")
    try:
        import_module(module_name)
    except ImportError:
        pass