2017-01-03 17 views
0

なぜ私はこれを見て、私のビューはHttpResponseオブジェクトを返します。私は、私の見解ではHttpResponseを返し、見ると、それは、レンダリングを返し分岐条件にすることができたようビューpolls.views.formsはHttpResponseオブジェクトを返しませんでした。それは代わりにNoneを返しました

これが私の見解

def forms(request): 
    from forms import SearchForm 
    """process the form""" 

    if request.method == 'GET': 

     #create a ew form and populate it with the data 
     form = SearchForm(request.GET) 

     #validate the data 
     if form.is_valid(): 
     #process the data in cleaned_data attribute 

      name = form.cleaned_data['name'] 

      return HttpResponse("Received this word: {}".format(name)) 

    else: 
     form = SearchForm() 

     #return this 
     return render(request, 'polls/form.html', {'form' : form}) 

です。他のビューも同じです

+1

フォームが*有効ではない場合はどうなりますか? (そして、あなたの外側のifステートメントは無意味ですが、POST経由でフォームを送信しない場合は、メソッドは常にGETになります) –

+0

実際は問題でした。誤って配置されたifステートメント。しかしそれは別の悲劇を作り出します。それはHttpResponseを返しません、それは私に空白のページを与える –

答えて

2

あなたのコードはあなたがカバーしていないif/elseブランチに入ったと思います。慎重にもう一度見てください。文if form.is_valid()が失敗した場合、コードはNoneを返します。私は通常、やっていることは次のとおりです。

def forms(request): 
    from forms import SearchForm 
    """process the form""" 

    form = SearchForm(request.GET or None) 
    # validate the data 
    if form.is_valid(): 
     # process the data in cleaned_data attribute 
     name = form.cleaned_data['name'] 
     return HttpResponse("Received this word: {}".format(name)) 

    return render(request, 'polls/form.html', {'form' : form}) 

あなたGETデータをフォームに準拠している場合、あなたはis_valid()ブランチに入るとHttpResponseを返します。それ以外の場合は、エラーメッセージまたは空白のフォームを持つフォームをレンダリングすると、どちらの状況でもreturn render(request, 'polls/form.html', {'form' : form})が返されます。

関連する問題