2

/homeと/home/addItemの2つのビューがあります

/ homeには、新しいアイテムを作成するためのフォームが含まれており、データを/ home / addItemにPOSTします。データが検証された場合、addItemはユーザーを/ homeにリダイレクトします。データが検証されない場合、問題が発生します。

それでもユーザーに/homeのフォームに戻ってもらいたいのですが、入力したフォームデータと、ユーザーに修正内容を通知するフォームエラーをフォームに含める必要があります。

ほとんどの場所、私は見つけることができました、提案します:

def addItem(request):
    form = NewItemForm(request.POST)
    if(form.is_valid()):
         #do stuff
         return HttpResponseRedirect("/home")
    return render_to_response("home-template.htm", {'form':form})

ただし、このソリューションでは、/homeコンテンツを表示している間ユーザーは/home / addItemのままになります。これは、私の場合はうまく機能しません。

では、フォームの内容とエラーとともにユーザーを/ homeに送信するにはどうすればよいですか?

4

1 に答える 1

4

フォームデータが大きくない場合は、送信されたデータをセッション/ Cookieに保存し、ユーザーをにリダイレクトできる可能性があります/home。View for/homeは、セッション/ Cookieで存在するフォームデータを確認し、以前に送信されたデータとエラーを含むフォームをユーザーに表示できます。

サンプルコード(エラーをチェックし、Cookieを保存/削除するための最良の方法):

def addItem(request):
    form = NewItemForm(request.POST)
    if form.is_valid():
       #OK
       return HttpResponseRedirect("/home")
    else:
       request.session['form_data'] = request.POST #this may not be exact way, please verify.
       return HttpResponseRedirect("/home")

 def home(request):
    form_data = request.session.get('form_data', None)
    form = NewItemForm(initial=form_data)
    form.is_valid() # to get errors in form
    #render form using template.
于 2012-07-19T17:48:31.830 に答える