5

1つのテンプレートに2つのまったく異なるフォームがあります。それらを1つのビューで処理する方法は?どのフォームが送信されたかをどのように区別できますか?プレフィックスを使用してそれを達成するにはどうすればよいですか?それとも、別々のビューを作成する方が良いでしょうか? クリス

に関して

4

3 に答える 3

5

個人的には、1つのビューを使用して各フォームのPOSTを処理します。

一方、使用されたフォームを示す非表示の入力要素を使用することもできます

<form action="/blog/" method="POST">
    {{ blog_form.as_p }}
    <input type="hidden" name="form-type" value"blog-form" /> <!-- set type -->
    <input type="submit" value="Submit" />
</form>

... 

<form action="/blog/" method="POST">
    {{ micro_form.as_p }}
    <input type="hidden" name="form-type" value"micro-form" /> <!-- set type -->
    <input type="submit" value="Submit" />
</form>

次のようなビューで:

def blog(request):
    if request.method == 'POST':
        if request.POST['form-type'] == u"blog-form":   # test the form type
            form = BlogForm(request.POST) 
            ...
        else:
            form = MicroForm(request.POST)
            ...

    return render_to_response('blog.html', {
        'blog_form': BlogForm(),
        'micro_form': MicroForm(),
    })

...しかし、繰り返しになりますが、フォームごとに1つのビュー(ビューがPOSTのみを受け入れる場合でも)は、上記を実行するよりも簡単だと思います。

于 2008-12-25T13:23:25.330 に答える
4

ayazが言ったように、フォーム送信ボタンには一意の名前を付ける必要があります

<form action="." method="post">
......
<input type="submit" name="form1">
</form>


<form action="." method="post">
......
<input type="submit" name="form2">
</form>


#view

if "form1" in request.POST:
    ...
if "form2" in request.POST:
    ...
于 2008-12-26T07:02:48.203 に答える
0

2 つの形式が完全に異なる場合、それらを 2 つの異なるビューで処理しても問題はありません。それ以外の場合は、zacheratesが触れた「隠し入力要素」のトリックを使用できます。または、常に各submit要素に一意の名前を付け、それに基づいて送信されたフォームをビューで区別することもできます。

于 2008-12-25T14:42:22.783 に答える