2012-08-04 133 views
0

我面临这个异常错误,我对此感到困惑,因为这个方法在类似的系统中工作,感谢任何帮助或指针。非常感谢!Django - view没有返回HttpResponse对象

异常值:该视图Project.qna.views.add_vote未返回HttpResponse对象。

def add_vote(request): 

if request.method == "POST": 
    q_id = request.POST['vote_form_q_id'] 
    a_id = request.POST['vote_form_a_id'] 
    vote_value = request.POST['vote_form_value'] 

    ok = False 
    vote_num = None 
    name = None 

    if q_id: 
     try: 
      question = Question.objects.get(id=q_id) 
      question.num_vote += int(vote_value) 
      question.save() 
      vote_num = question.num_vote 
      name = 'Question_'+str(q_id) 
      ok = True 

     except Question.DoesNotExist: 
      pass 
    elif a_id: 
     try: 
      answer = Answer.objects.get(id=a_id) 
      answer.num_vote += int(vote_value) 
      answer.save() 
      vote_num = answer.num_vote 
      name = 'Answer_'+str(a_id) 
      ok = True 
     except Answer.DoesNotExist: 
      pass 

    if ok and request.is_ajax: 
     result = simplejson.dumps({ 
      "vote_num": vote_num, 
     }, cls=LazyEncoder) 
     response = HttpResponse(result, mimetype='application/javascript') 

     response.set_cookie(name, datetime.now) 
    return response 
+0

嘛。如果您的缩进在实际文件中是相同的,那么它将无法工作,因为这是一个错误的开始。 – aychedee 2012-08-04 10:43:48

+1

提示:当你最后一个“if”失败时会发生什么? – 2012-08-04 13:30:18

回答

0

请修复您的注意事项,您似乎也有很多可以简化的解决方法。

每个django视图都应该返回一个HttpResponse对象,你似乎有很多地方不会这样。为了缩小您的问题范围,请将pass更改为print声明以查看代码实际失败的位置。如果您可以展示您的POST数据,这将非常有帮助。

0

那么很难说没有看到你对视图做出什么样的要求。但是你发送POST请求吗?因为您不以任何方式处理GET请求。此外,缩进也是错误的。但那可能只是切割和粘贴出错。

0

这是未经测试,但它是一个更清洁,更可靠的设计,我相信你的逻辑在配合和突出的点,回访的HttpResponse是必要的:

def add_vote(request): 
    if not (request.method == 'POST' and request.is_ajax): 
     return # Some suitable response here 
    try: 
     vote_value = int(request.POST.get('vote_form_value','')) 
    except ValueError as e: 
     pass # Some suitable response here 

    def saveobj(model, key, val): # helper function to reduce code repetition 
     item = model.objects.get(id=key) 
     item.num_vote += val 
     item.save() 
     return item.num_vote, '%s_%s' % (model.__class__.__name__, key) 

    for model, key in [(Question, 'vote_form_q_id'), (Answer, 'vote_form_a_id')]): 
     try: 
      new_vote_value, name = saveobj(model, request.POST[key], vote_value) 
      break 
     except (KeyError, ObjectDoesNotExist) as e: 
      continue # or error out 
    else: 
     pass # neither question or answer found - so suitable response here 

    # return ajax response here.... 
相关问题