在哪里放django信号接收器代码,将它们传播到多个文件?

时间:2015-04-17 11:41:29

标签: django signals

我已将信号接收器代码放在相应的模型文件中。

然而,信号接收器不断增长,我想将它们分成多个文件。

我还没有看到有关放置信号接收器代码的位置的讨论。

(让我怀疑我不应该制作很多信号接收器吗?)

1 个答案:

答案 0 :(得分:9)

参见文档:
https://docs.djangoproject.com/en/1.8/topics/signals/#connecting-receiver-functions

将它们放在单独的signals.py文件中很常见,可能是项目中每个模块一个,但是您需要确保导入这些文件以便信号接收器注册。

如上文所述,Django 1.7+现在有这种情况的AppConfig.ready机制

这里有一个很好的解释:
http://chriskief.com/2014/02/28/django-1-7-signals-appconfig/

(作为你可能会做的一个例子)

基本上是:

# myapp/__init__.py
default_app_config = 'myapp.apps.MyAppConfig'

# myapp/apps.py
from django.apps import AppConfig

class MyAppConfig(AppConfig):

    name = 'myapp'
    verbose_name = 'My App'

    def ready(self):

        # import signal handlers
        import myapp.signals.handlers