Django信号接收跨应用程序

时间:2013-07-25 09:36:14

标签: django django-signals

我有main_appapp2main_app基本上是包含数据的项目列表,app2包含有关所述项目的更多信息。

main_app不应该知道app2,但app2可以从main_app导入。

main_app/signals.py内,我有

import django.dispatch
mysignal = django.dispatch.Signal(providing_args=['uid'])

main_app/views.py中,我有一个视图,该视图呈现各种main_templates,其中包含项目的详细信息,用于编辑的视图以及用于提交所述已编辑数据的视图。我们的想法是,在调用每个信号时发送信号,app2收到此信号。 main_template使用“with”调用来获取template2和该应用的信息。

app2/processes.py我有以下内容:

import django.dispatch
from django.dispatch import receiver
import my models
from main_app.signals import mysignal, (mysignal2, etc)

然后对于每种方法,我都有

@receiver(mysignal)
def foo(sender, **kwargs) etc

好的......所以,在main_app/views.py中,如果我有一行:

from app2.processes import mysignal, mysignal2 etc

一切顺利。但我想删除app2中对main_app的依赖。就我而言,app2只是从main_app/signals.py导入这些信号。 但是,如果我试图摆脱上述行并将以下内容放入main_app/views.py

from main_app.processes import mysignal, my...

它不起作用......我没有收到错误但app2中的数据没有呈现到模板中,我真的不明白为什么......任何想法?

1 个答案:

答案 0 :(得分:3)

app2中的信号接收器可能未注册。简单检查:将raise Exception("I was imported!");作为app2/processes.py中的第一行。你可能永远不会看到那个例外。您必须确保信号接收器正在注册。你可以通过import app2.processes在Django所看到的地方做到这一点。例如,在app2/models.py