【问题标题】:Getting information from Django custom signal receiver从 Django 自定义信号接收器获取信息
【发布时间】:2013-07-07 11:16:40
【问题描述】:

这实际上是我今天的第二个问题,但我想知道...是否可以从信号处理程序中检索信息。

我有一个项目列表,称之为列表,每个项目都在 AppA 中。每个项目都有几个特征,这些特征保存在不同的应用 AppB 中。

所以,我想我可以创建一个字典、dict 并迭代列表中的项目。在每次迭代中,我希望向 AppB 发送信号并检索信息,即有类似

def blob(request):
    dict = {}
    for item in list:
        signal.send(sender=None, id=item.id)
        dict[item] = (char1, char2)
    ...some html request

我的信号处理程序如下所示:

def handler(sender, id, **kwargs):
    model2 = Model2.objects.get(id=id)
    a = model2.char1
    b = model2.char2
    return (a, b)

然后我希望能够在网页中生成项目及其特征的列表......问题显然是信号发送者必须发送信号,并获取我想要的信息。 ...这可能吗:S?

目前,我收到一条错误消息,提示“未定义全局名称 'char1'....并且我已将处理程序和信号导入 blob 所在的 view.py....所以我的问题无法解决吗? / 是否应该以其他方式明确解决?或者我几乎可以肯定在导入东西时犯了一个愚蠢的错误?

【问题讨论】:

  • 您想通过信号发送一些数据,然后在完成后从信号中取回数据?
  • 是的,希望在 blob 末尾的 html 请求中使用所述数据。
  • 您想为此开始研究消息队列。 Celery 是 Django 的客户端。
  • 好的,谢谢。我的意思是这看起来相当棘手......感觉它应该真的很简单?如果我通过信号发送器中的默认值传递 a 和 b 怎么样。然后处理程序更新它们?...
  • 我的意思是当前结果是当我尝试在我的 blob 函数中使用 'blah' 时出现名称错误,“未定义全局名称 'blah'”

标签: django django-signals


【解决方案1】:

这实际上并没有那么棘手。以为我应该发布它是如何解决的。在我看来,我实际上是写了

    response_list=signal.send(sender=None, list=list_of_items)

然后我遍历了我的 response_list,将项目添加到一个新列表中,如下所示:

    snippets = []
    for response in response_list:
    logger.error(response)
    snippets.append(response[1])

然后可以调用 sn-ps 中的响应,就像我模板中的字典一样。当我问这个问题时,我不明白我可以将某些东西等同于信号发送......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2013-12-29
    • 2011-10-12
    • 2018-01-31
    相关资源
    最近更新 更多