Код инициализации приложения Django (например, подключение к сигналам) - PullRequest
8 голосов
/ 19 января 2010

Мне нужно место для запуска кода инициализации, который зависит от приложения (например, подключение к сигналам).Когда я поместил код в модуль приложения __init__.py, я закончил с циклическим импортом моделей.

Есть ли способ вызвать функцию при настройке фреймворка и до того, как запросВыполнено?

Я использую довольно старую версию django 96.6, но меня также интересуют решения для текущей версии.

По поводу дублирования других вопросов: Вот как вопрос отличается от дубликатов, предложенных С.Лоттом в комментариях:

Комментарии к текущим решениям: Я не могу использовать URL-адреса, как большинство моих приложенийне выставлять URL-адреса.Они просто слушают сигналы и хранят дополнительную информацию в базе данных.

Ответы [ 4 ]

5 голосов
/ 19 января 2010

Лучшее место для подобных вещей ... где угодно, просто импортируйте его в свой файл urls.py (по понятным причинам URL загружаются перед любыми запросами).

5 голосов
/ 19 января 2010

Сигналы, в частности, рекомендуется помещать в models.py вашего приложения.

Попробуйте models.py или urls.py и сообщите нам, если вам повезет.

2 голосов
/ 19 января 2010

Если вы не предоставите URL-адреса, тогда вам действительно нужно будет указать его в models.py, просто так оно и есть.

Теперь, к вашим проблемам: вы хотите определить это в своем собственном модуле, отлично, сделайте это. Чтобы избежать циклического импорта, используйте django.db.models.get_model для динамического возврата модели. Вы можете предоставить функцию инициализации для вашего модуля сигналов для импорта соответствующей модели и подключения соответствующих сигналов. Эта функция будет вызываться в конце models.py, запускаться будет только один раз и после инициализации вашей модели.

Есть шанс, что это не сработает (если модели еще не готовы, когда вы его настраиваете), но попробуйте и дайте нам знать.

0 голосов
/ 24 сентября 2014

Для меня работает следующее:

В init .py:

from . import models
from . import signals

signals.py импорт из моделей, но не наоборот.signal.py содержит код модуля, который запускается сразу после импорта и, следовательно, запускается при запуске сервера django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...