2013-07-25 39 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