はじめに
こちらの記事の続きで書いてます。
ルーティングの記述
以下のURLパターンを追記。
./app/urls.py
urlpatterns = [
...略...
path("form", views.form, name="form"),
]
ビューの記述
以下を追記。
./app/views.py
def form(request):
params = {}
if(request.method == 'POST'):
fluit = request.POST['fluit']
params = {
'fluit': fluit,
}
return render(request, 'app/form.html', params)
if(request.method == 'POST'):
は、POSTで受けた場合のみ、if文の内容を実行するという処理になります。
fluit = request.POST['fluit']
は、POSTのパラメータ(fluit)に入っている文字を、Pythonの変数(fluit)に格納します。
params = {}
で初期化してますので、POSTで受けていない場合は空データのparamsがHTMLテンプレートに渡されます。
HTMLの記述
./templates/app/form.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FormTest</title>
</head>
<body>
<h1>FormTest</h1>
<p>フォーム送信テスト</p>
<form action="{% url 'form' %}" method="post">
{% csrf_token %}
<label for="fluit">好きなフルーツは?: </label>
<input id="fluit" type="text" name="fluit">
<input type="submit" value="送信">
</form>
{% if fluit %}
<p>{{ fluit }}</p>
{% endif %}
</body>
</html>
<form action="{% url 'form' %}" method="post">
こちらは送信先設定です。{% url 'form' %}
は、views.pyから与えられた引数で送信先URLに書き換えられます。
{% csrf_token %}
正しいフォームから送られた値なのかチェックする仕組み(CSRF対策)で用いられます。
{% if fluit %}
〜{% endif %}
templateの中にif文を記述することができます。
この場合ですと、fluitにデータがなければif文の中身を表示しません。
あれば、fluitに入っている文字を表示します。