今回の記事はDjangoのプロジェクトファイルの「form.py」で入力欄を作成し、入力された文字列を変数として取得する方法についてご紹介します。
今回作成するサンプルアプリのルールとユーザー名入力と入力文字をhtmlで表示までは以前の記事のこちらからご参照の程よろしくお願いいたします。
今回はさらにユーザ名の取得を高度にするため(入力されていないと入力してください等のエラーメッセージ入れたり)に、「forms.py」を用いて「form」の操作を行う方法を紹介していきます。
「forms.py」の使い方
まずforms.pyとは何かというところなのですが実際に何かと言われると困るのですが、端的に書くとDjango内の入力欄内の情報(例えば文字数、型等)を一つのファイルにまとめて格納することでwebフォームの管理をしやす異様にしているのではないでしょうか。そのまとまったファイルをimportするだけでviews.pyから操作もできますし、htmlに表示させることもできます。こういった便利な機能ですのでぜひ使えるようになっていきましょう。
まず、forms.pyに書く内容に関してですが、下記を記述ください
さて具体的にどこを変更したかですがまずforms.pyにかきを記入。
from django import forms
class playerForm(forms.Form):
player1 = forms.CharField()
player2 = forms.CharField()
player3 = forms.CharField()
上記コードの解説ですが私も詳しくわかっているわけではないのですが名前の記述ということで変数をplayer1~3と記載しDjangoのformsクラスからformsを使えるようにimportして、型をCharFieldと記載しています。
これでforms側は完成。
「forms.py」の使い方
htmlの変更点
次にこのforms.pyに記入したものをhtmlに反映させるためにindex.htmlを編集。
<!DOCTYPE html>
{% load static %}
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>きのこがりゲーム</title>
</head>
<body>
<div>
<form action="{% url 'move_to_gamepage' %}" method="GET">
<br>
{{ form.as_p }}
<hr>
<input type="image" src="{% static "ap/image/button/start_button.png" %}" name="start_button">
</form>
</div>
</body>
</html>
表示されるWebページ内の入力欄はもともとの形と変わりないですが変更点として<form>で記載していた箇所を全て{{ form.as_p }}として記載しています。ちなみに表示のさせ方は色々あるそうですので気になるかたは調べてみてください。
今回は全て表示させる、form.as_pという記述で書いております。これで値を入力して次のページの{{ player2 }}などの変数に値が含まれるようになっております。
「views.py」の変更点
最後にどのようにviews.pyを変更するかですが、入力欄に値が入っていないかどうかの判定に関してはform.is_valid()という便利な機能があります。
これをIf文で記載すればまさに日本語で言うと「もしformに値が入力されていれば〜」と言う記述になります。
これを使って下記のように変更します。その際、formのimportとforms.py内のclassのインポートもお忘れなく。
from django.shortcuts import render
from .forms import playerForm
from . import forms
def index_show(request):
form = playerForm()
return render(request,'index.html',{
'form': form,
})
def move_to_gamepage(request):
form = forms.playerForm(request.GET or None)
if form.is_valid():
players = {
'player1': request.GET.get('player1'),
'player2': request.GET.get('player2'),
'player3': request.GET.get('player3'),
}
return render(request, 'gamepage.html', players)
ここまで行けばまずは同様ページにアクセスhttp://127.0.0.1:8000。
見辛いですが下記のようになっていれば大丈夫です。
クリックすると移動後のページにその名前が表示されているはずです。
次はページの装飾に関してcssほぼ初心者があれこれDjangoでやってみた記事に関してこちらで紹介していますのでご参照ください。
コメント
[…] 続きはformsでさらに高度な入力フォーマットの作成を行なっていきます。こちらの記事からご参照ください。「Djangoでformを使って入力欄を作り変数として格納させる方法【Djangoでカード… 」 […]
[…] 続きはformsでさらに高度な入力フォーマットの作成を行なっていきます。こちらの記事からご参照ください。「Djangoでformを使って入力欄を作り変数として格納させる方法【Djangoでカード…」 […]