【问题标题】:Error: didn't return an HttpResponse object. It returned None instead错误:未返回 HttpResponse 对象。它返回 None 而不是
【发布时间】:2019-10-24 22:32:40
【问题描述】:

我想在 html 模板中按下一个按钮

              <form action="{% url 'speech2text' %}" class="card-text" method="POST">
                  {% csrf_token %}
                  <button class="btn btn-primary btn-sm" type="submit">Start</button>
              </form>

              <p> Sie haben das folgende gesagt: </p>
              <p> {{ speech_text }} </p>

按下按钮,将执行以下视图中的代码并将结果发送回模板:

def speech2textView(request):
    if request.method == "POST":
        r = sr.Recognizer()
        with sr.Microphone() as source:
            audio = r.listen(source)
            text = r.recognize_google(audio, language="de-DE")
            args = {'speech_text': text}
            return render(request, 'speech2text.html', args)

这里有什么问题?非常感谢您的帮助。

【问题讨论】:

  • 看起来您以某种方式使用非 POST 方法调用视图,在这种情况下,您的视图没有返回任何内容(因此实际上返回 None)。不过,您的表单看起来不错。
  • 您应该使用print() 来检查request.method 是否具有"POST" 的值以及text 是否从谷歌获得任何字符串。您还应该检查运行时是否没有任何错误。我假设您在本地计算机上运行 django,因为服务器上的 django 无权访问您的本地麦克风。
  • 非常感谢您的支持。 POST 效果很好,当我在 python 中运行它时,文本是正确的。麦克风的好点。你有什么建议?我需要通过前端捕捉声音吗?

标签: python django button


【解决方案1】:

我再次编辑了代码,现在它可以工作了。我想分享这个。非常感谢这个社区。​​p>

def speech2textView(request):
    args = {}
    if request.method == "POST":
        print(request.method)
        r = sr.Recognizer()
        with sr.Microphone() as source:
            audio = r.listen(source)
            text = r.recognize_google(audio, language="de-DE")
            args = {'speech_text': text}
    return render(request, 'speech2text.html', args)

【讨论】:

    【解决方案2】:

    出现这个错误是因为没有返回! return render(request, 'speech2text.html', args) 似乎不起作用。尝试在with 之外添加return render(),如果发生同样的错误,请尝试在request.method == "POST": 之外添加它。这样你可以检查问题发生在哪里。

    【讨论】:

      【解决方案3】:

      尝试通过添加打印命令并像这样在命令窗口中检查来检查上下文

      def speech2textView(request):
          if request.method == "POST":
              r = sr.Recognizer()
              with sr.Microphone() as source:
                  audio = r.listen(source)
                  text = r.recognize_google(audio, language="de-DE")
                  args = {'speech_text': text}
                  print(args)
                  return render(request, 'speech2text.html', args)
      

      如果您没有在命令窗口中看到数据,我认为问题出在您的识别步骤或请求步骤中,请继续跟踪打印一些数据以查看代码卡住或失败的位置。

      【讨论】:

      • 识别器运行良好。我用python测试过。你对着麦克风说话,文字就会出现。我将 return() 语句移到了左侧,但随后出现错误:“UnboundLocalError at /speech2text/,在赋值之前引用了局部变量 'args'”。
      • 另一个测试结果到:“POST”请求工作正常。通过单击该按钮,会出现一个 POST 请求。从 "with sr.Microphone ... 开始的代码有问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2020-11-01
      • 2014-12-03
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      相关资源
      最近更新 更多