3

シンプルなペット ストア アプリを作成し、検索ボックス機能を追加したところ、このエラーが発生しました

ValueError at /pet/search/
The view mysite.pet.views.search_page didn't return an HttpResponse object.

render_to_response を HttpResponseRedirect に変更しようとしましたが、それでも同じエラーが発生しました。

ビューで search_page 関数にリンクします。

def search_page(request):
    form = SearchForm()
    if request.method == "POST":
        f = SearchForm(request.POST)
        if f.is_valid():
            Pets = Pet.objects.filter(animal = f.cleaned_data["text"])
            return HttpResponseRedirect("search.html",{"Pets":Pets},{"form":form})
        else:
            return render_to_response("search.html",{"form":form} , context_instance = RequestContext(request))

私はいくつかの調査を行い、HttpRequestが作成されたときにビューがHttpResponseを返す必要があり、render_to_responseが単なるショートカットであることを理解しています.誰かがこの関数が機能しない理由を説明できます.ありがとう

4

2 に答える 2

7

HttpResponse object if リクエスト タイプがPOST

ビューでこれを克服するには、リクエスト タイプが post でない場合に処理する何かを記述します

def search_page(request):
    form = SearchForm()
    if request.method == "POST":
        f = SearchForm(request.POST)
        if f.is_valid():
            Pets = Pet.objects.filter(animal = f.cleaned_data["text"])
            return HttpResponseRedirect("search.html",{"Pets":Pets},{"form":form})



    return render_to_response("search.html",{"form":form} , context_instance = RequestContext(request))

これがあなたに役立つことを願っています

于 2013-03-05T06:31:52.503 に答える
1

エラーは、関数が呼び出されたときにメソッドタイプがPOSTでなく、対応するHttpResponseオブジェクトが見つからないためです。

def search_page(request):
    form = SearchForm()
    if request.method == "POST":
        f = SearchForm(request.POST)
        if f.is_valid():
            Pets = Pet.objects.filter(animal = f.cleaned_data["text"])
            return HttpResponseRedirect("search.html",{"Pets":Pets},{"form":form})
        else:
            return render_to_response("search.html",{"form":form} , context_instance = RequestContext(request))

    return render_to_response("any.html",{} , context_instance = RequestContext(request))
于 2013-03-05T07:37:18.390 に答える