2017-02-09 13 views
1

У меня есть множество приложений, которые могут содержать или не содержать файл с именем activity.py. Этот файл в основном регистрирует сигналы модели. Он хорошо работает, когда я импортирую этот файл в метод ready класса AppConfig. Проблема в том, у меня есть десяток приложений, так что я не хочу иметь этот же метод во всех моих программах:Выполнить код после Django init

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

Я хотел бы запустить скрипт, который будет через INSTALLED_APPS массив, и если это приложение содержит файл activity.py, импортируйте его.
Я не могу найти способ запуска функции, когда все приложения готовы и до того, как сервер прослушивает.

ответ

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 
+0

Когда я запускаю этот код? Все модели должны быть сначала созданы –

1

Одна вещь, которую вы можете сделать, это создать другое приложение, чья единственная цель состоит в том, чтобы выполнить эту инициализацию и поместить его в INSTALLED_APPS. В этом приложении подкласс AppConfig и переопределить метод AppConfig.ready().