0

私はこの例外エラーに直面しており、このメソッドは同様のシステムで機能していたため、困惑しています。ヘルプやポインタをいただければ幸いです。どうもありがとう!

例外値: ビュー 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
4

3 に答える 3

0

インデントを修正してください。また、簡略化できる回避策がたくさんあるようです。

すべての django ビューは HttpResponse オブジェクトを返す必要があります。そうでない場所がたくさんあるようです。問題を絞り込むpassには、printステートメントごとに変更して、コードが実際に失敗する場所を確認します。POSTデータを提示していただけると助かります。

于 2012-08-04T10:45:04.940 に答える
0

ビューに対してどのようなリクエストを行っているかを見ないとわかりません。しかし、POST リクエストを送信していますか? GET リクエストをまったく処理しないためです。インデントも間違っています。しかし、それは切り取りと貼り付けがうまくいかないだけかもしれません。

于 2012-08-04T10:45:23.083 に答える
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....
于 2012-08-04T13:25:49.213 に答える