概要
テンプレートのフォームで入力・送信されたデータをビューで受け取って処理する方法の基本。
ビュー関数/メソッドの引数(たとえばrequest)のPOST配列でフォームのINPUT要素のname属性値を指定して値を取得する。
request.POST['name属性値']
実装例
2つのページへのルーティング
urls.pyでinputページとresultページへのルーティングを設定。inputページにフォームを置き、そこから送信されたデータをresultページで表示することとする。
DTLのurlタグを使うため、各ルートにname引数でルート名を付けている。
| 1 2 3 4 5 6 7 8 9 | from django.urls import path from formtest import views app_name = 'formtest' urlpatterns = [     path('', views.input, name='input'),     path('result', views.result, name='result'), ] | 
inputページのためのビュー
ルート名formtest:inputでルーティングされるview関数。単にinput.htmlテンプレートをレンダリングしている。
| 1 2 3 4 | from django.shortcuts import render def index(request):     return render(request, 'formtest/input.html') | 
input.htmlテンプレート
input.htmlテンプレート。フォームには、textタイプのINPUT要素と、3つの選択肢を持つradioタイプのINPUT要素群が置かれている。
- textタイプの- INPUT要素の- name属性は- input_test
- radioタイプの3つの- INPUT要素の- name属性は- radio_choiceで値は- pine、- bamboo、- plum
送信ボタンが押されると、methodで指定したURLに飛ぶが、ここではurls.pyで定義したformtest:resultに飛ぶようにDTLのurlタグを使っている。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <h1>フォームテスト</h1> <form action="{{ url formtest:result }}" method="post">   {% csrf_token %}   {# text #}   <div>     <input type="text" name="input_text" value="">   </div>   {# radio #}   <div>     <label>       <input type="radio" name="radio_choice" value="pine">松     </label>     <label>       <input type="radio" name="radio_choice" value="bamboo">竹     </label>     <label>       <input type="radio" name="radio_choice" value="plum">梅     </label>   </div>   <input type="submit" value="送信"> </form> | 
resultビュー
フォームからの送信に対してviews.pyのresult関数が呼ばれる。result.htmlテンプレートにcontext辞書を介して2つの変数input_textとradio_choiceを渡している。
- input_text変数には、- name='input_text'で指定されたテキストの内容が- request.POST['input_text']で取得されて代入される
- radio_choice変数には、- name='radio_choice'で指定されたラジオボタンのうち選択されたものの- value値がrequest.POST[‘radio_choice’]で取得され、これに対応する文字列が代入される
| 1 2 3 4 5 6 7 8 9 10 11 12 | from django.shortcuts import render def input(request):     return render(request, 'formtest/index.html') def result(request):     radio_result = { 'pine': '松', 'bamboo': '竹', 'plum': '梅' }     context = {             'input_text': request.POST['input_text'],             'radio_choice': radio_result[request.POST['radio_choice']],         }     return render(request, 'formtest/result.html', context) | 
result.htmlテンプレート
resultテンプレートでは、ビューのcontextで設定された変数の内容を表示する。
| 1 2 3 4 5 6 7 8 9 10 | <h1>送信結果</h1> <p>   入力されたテキストは"{{ input_text }}"です。 </p> <p>   選択されたのは"{{ radio_choice }}"です。 </p> <a href="{% url 'formtest:input' %}">フォームに戻る</a> |