【问题标题】:Why do I get an error trying to return an HttpResponse from a Django View function?为什么我尝试从 Django 视图函数返回 HttpResponse 时出错?
【发布时间】:2017-04-06 18:11:03
【问题描述】:

我正在尝试通过 Ajax 从 JavaScript 代码调用 Django View 函数。 View 函数返回一个 HttpResponse 我试图在控制台上打印出来。

但在控制台上显示 'undefined',我在 python 终端上收到错误消息:'AttributeError: 'NoneType' object has no attribute 'split'

查看功能是这样的:

@csrf_exempt
def result(request):
     if(request == 'POST'):
             # datafromclient = request.form['mydata'] 
             # finalRes = runAreaReview(datafromclient)
             test = 'testing'
             return HttpResponse(test)

HTML代码是这样的:

<div align="center" class="input-line">
     <form class="input-form" method="post">{% csrf_token %}
        <input type = "text" id = "ans" class = "form-control" name = "address" placeholder="Type postcode..."><br><br>
        <button id = "homeBtn" class="btn btn-primary">Find info</button><br><br>
     </form>
</div>

JavaScript 代码是这样的:

btn.addEventListener('click', function(){
var plcholder = document.getElementById('ans').placeholder;
var btnres = document.getElementById('ans').value;
if(btnres == '' || btnres == plcholder)
    console.log('you failed');
else
    console.log(btnres);
    var result = callpy(btnres);
    console.log(result);
});

function callpy(input){
var pyres = $.ajax({
    type: "POST",
    url:'/result',
    data: { mydata: input }
});
return pyres.responseText;

错误我得到的是:

self.status.split(' ',1)[0], self.bytes_sent
AttributeError: 'NoneType' object has no attribute 'split'

注意:我研究过这个问题,以前版本的 Django 有一个错误导致这个错误,但我有一个最新的版本,我仍然得到这个错误。 p>

【问题讨论】:

  • 请修复视图函数中的缩进。不,返回响应实际上是 Django 所做的主要事情:没有任何版本意外返回 None。
  • 错误的上下文是什么?
  • @DanielRoseman :关于缩进,我从我的代码中复制粘贴它,有些东西搞砸了,但我的代码上的缩进是正确的。而且我仍然认为早期版本的 Django 引发了同样的错误,该错误已在其更高版本中修复。不过,这里没关系。你知道为什么我会在这里收到这个错误吗?
  • 错误必须来自pyres.responseText,因为我没有看到任何其他分裂发生。你能打印console.log(pyres)看看回复有没有responseText吗?
  • 缩进仍然不正确。 if 块里面是什么?

标签: javascript python ajax django python-3.x


【解决方案1】:

代码以 200 失败,因为您使用的是 if(request.method == 'POST'): 而不是 if(request.method == 'POST'):,这会破坏输出。并使用这个 javascript,它应该可以工作

@csrf_exempt
def result(request):
     if(request.method == 'POST'):
         # datafromclient = request.form['mydata'] 
         # finalRes = runAreaReview(datafromclient)
         test = 'testing'
         return HttpResponse(test)


function callpy(input){
  $.ajax({
        type: "POST",
        url:'/result',
        data: { mydata: input },
        success: function(data) {
            console.log(data);
        },
        error: function() {
           // error handling here 
        },
  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2012-09-06
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2011-03-06
    相关资源
    最近更新 更多