1

以下のテンプレートに示すように、ユーザーはチェックボックスを使用してスロットを選択し、ユーザー名も入力する必要があります。

<form action="/clubs/{{ club.id }}/vote/" method="post">
{% csrf_token %}
{% for slot in tom_open_slots %}
    <input type="checkbox" name="slot" id="slot{{ forloop.counter }}" value="{{ slot.id }}" />
    <label for="slot{{ forloop.counter }}">{{ slot.slot }} on Court {{slot.court}}</label><br />
{% endfor %}    
<input type="text" name="username" />
<input type="submit" value="Reserve" />

次に、チェックボックスで入力したユーザー名と選択した時間を表示したいと思います。以下のビューとテンプレートを使用してこれを行います。

def vote(request, club_id):
    if 'username' in request.GET and request.GET['username'] and 'slot' in request.GET and request.GET['slot']:
        username = request.GET['username']
        slot = request.GET['slot']
        return render_to_response('reserve/templates/vote.html',{'username':username, 'slot':slot})
    else:
        return HttpResponse('Please enter a username and select a time.')


{{slot}}
{{username}}

ただし、vote.htmlにアクセスすると、常にエラーメッセージが表示されます(ユーザー名を入力して時間を選択してください)。2つのGETパラメーターを取得していないビューの何が正しくありませんか?

4

2 に答える 2

2

POSTフォームでリクエストを使用しています:

<form action="/clubs/{{ club.id }}/vote/" method="post">

しかし、ビューでは、リクエストGETから来るオブジェクトをチェックしています:GET

request.GET

フォームメソッドをに変更してmethod="get"、問題を修正します。

編集:GETvsPOSTリクエストの詳細はこちら:いつPOSTを使用し、いつGETを使用しますか?

于 2012-05-23T03:17:44.393 に答える
1

Djangoでは、HttpRequestオブジェクトにはリクエストパラメータを提供する3つのディクショナリがあります。

  • request.GETクエリ文字列パラメータを提供します。

  • request.POST投稿データを提供し、

  • request.REQUESTあなたに両方を与えます。

あなたの場合、フォームはPOSTメソッドを使用しているため、またはのいずれかを使用する必要がありrequest.POSTますrequest.REQUEST

参考:https ://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.GET

于 2012-05-23T03:20:47.433 に答える