【问题标题】:Django signal receiving across apps跨应用程序接收 Django 信号
【发布时间】:2013-07-25 09:36:14
【问题描述】:

我有一个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

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

from main_app.processes import mysignal, my...

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

【问题讨论】:

  • 所以没有人知道为什么虽然 app2.processes 从 main_app.signals 导入信号,但我必须通过 app2 将信号导入 main_app.views,而不是直接从 main_app.signals 导入?

标签: django django-signals


【解决方案1】:

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

【讨论】:

  • 不错!非常感谢。我将import app2.processes 放入app2/__init__.py 实际上是因为app2/processes.py 已经导入app2/models.py...假设这并不荒谬!无论如何都可以完美运行!
猜你喜欢
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
相关资源
最近更新 更多