2017-07-15 10 views
-1
ValueError at /blog/1/comment/new/ 

The view blog.views.comment_new didn't return an HttpResponse object. It returned None instead. 

Request Method: GET 

Request URL: http://localhost:8000/blog/1/comment/new/ 

なぜリクエストメソッドが取得されますか?DjangoはHttpResponseオブジェクトエラーを返しませんでしたか?

HTML

<form action="" method="post"> 
 
    {% csrf_token %} 
 
    <table> 
 
    {{ form.as_table }} 
 
    </table> 
 
    <input type="submit" /> 
 
</form>

VIEWS

@login_required 
def comment_new(request, post_pk): 
    post = get_object_or_404(Post, pk=post_pk) 

    if request.method == 'post': 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.post = post 
      comment.author = request.user 
      comment.save() 
      return redirect('blog:post_detail', post.pk) 
     else: 
      form = CommentForm() 
     return render(request, 'blog/comment_form.html', { 
      'form': form, 
     })` 

だけPOSTメソッドの応答を返すされているおかげで

+0

htmlフォームのアクションパラメータに何も指定しなかった理由 –

+0

今はパラメータが必要ありません。 –

+1

アクションURLを指定する必要があります。そうでない場合は、サーバーに送信される余分なクラッタがないようにします。 –

答えて

1

。このようにコードをリファクタリングする必要があります。

def call_comment_form(request): #your function name 
    form = CommentForm() 
    if request.method == 'post': 
     form = CommentForm(request.POST) 
     if form.is_valid(): 
      comment = form.save(commit=False) 
      comment.post = post 
      comment.author = request.user 
      comment.save() 
      return redirect('blog:post_detail', post.pk) 
     else: 
      form = CommentForm(request.post) #this will return the errors in your form 
    return render(request, 'blog/comment_form.html', { 
    'form': form, 
})` 

urlが最初に呼び出されたときは、これはGETメソッドなので、フォームのインスタンス(空のフォーム)を送信する必要があります。

+0

これはOPの質問に完全には答えません。 OPは彼のhtml形式で投稿をしたときに彼のリクエスト方法が得られる理由を尋ねました。この回答をリファクタリングして、 –

+0

フォームの新しいエントリを要求している場合は、最初にGETメソッドを使用してフォームを操作することができます。しかし、どこでフォームを送信するかはPOSTメソッドでなければなりません。フォームに記入されたデータがサーバーに応答を返送する際に公開されないように、GETでフォームを送信しないでください。 –

+0

ええ、露出やその他についてあなたが言っていることは何でも訂正してください。しかし、まだあなたは私が求めていたものに答えなかった。また、この行の '{contextdata:data}'の答えに文法エラーがあります。文脈データを文字列として使うか、変数として定義したいのですか? –

関連する問題