2013-07-25 34 views
1

我有一个main_appapp2main_app实质上是包含数据的项目列表,并且app2具有关于所述项目的更多信息。跨应用的Django信号接收

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 

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

from app2.processes import mysignal, mysignal2 etc 

一切正常。但我想删除对main_appapp2的任何依赖。就我而言,app2只是从main_app/signals.py导入这些信号。 但是,如果我试图摆脱上述线路和把下列main_app/views.py

from main_app.processes import mysignal, my... 

它不工作...我没有得到一个错误,但是从APP 2中的数据不会渲染成模板,我真的不明白为什么......任何想法?

+0

因此,没有人知道为什么尽管app2.processes从main_app.signals导入信号,但我必须通过app2将信号导入main_app.views,而不是直接从main_app.signals导入信号? – user2564502

回答

3

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

+0

不错!非常感谢。我把'app2.processes'放在'app2/__ init __。py'中,实际上'app2/processes.py'已经导入'app2/models.py' ......假设这并不荒唐!无论如何,完美无缺! – user2564502