FormWizardを試してみた
まずはFormWizard: multiple-step forms in Djangoの通り試してみた。
画面遷移は
- ユーザ名とメールアドレスを入力してsubmit
- 項目を選択して、テキストエリアに入力してsubmit
- 最後にthanksページを表示
です。
アプリディレクトリの直下にforms.pyを作成して以下のコードを記述
from django import newforms as forms from django.http import HttpResponseRedirect from django.contrib.formtools.wizard import FormWizard class ContactOne(forms.Form): name = forms.CharField() email = forms.EmailField() class ContactTwo(forms.Form): CHOICES = [(x, x) for x in ("I like your site", "I hate your site", "I don't care")] feeling = forms.ChoiceField(choices = CHOICES) message = forms.CharField(widget = forms.widgets.Textarea) class ContactWizard(FormWizard): def done(self, request, form_list): return HttpResponseRedirect('/contact/thanks/')
次に、以下をurls.pyに追加
from projectname.appname.forms import ContactOne, ContactTwo, ContactWizard urlpatterns = patterns('', (r'^contact/$', ContactWizard([ContactOne, ContactTwo])), (r'^contact/thanks/$', 'django.views.generic.simple.direct_to_template', {'template': 'thanks.html'}), )
次にtemplateを作成
{% extends 'base.html' %} {% block content %} <form action='.' method='POST'> <table> {% ifequal step 2 %} <p>You're almost done!</p> {% endifequal %} <input type="hidden" name="{{ step_field }}" value="{{ step0 }}" /> {{ previous_fields|safe }} {{ form }} </table> <p><input type="submit" value="Submit" /></p> </form> {% endblock %}
次にthanksページを作成して、設置。
この時に、urls.pyを見ると
(r'^contact/thanks/$', 'django.views.generic.simple.direct_to_template', {'template': 'thanks.html'}),
と、'django.views.generic.simple.direct_to_template'を使っているので、
settings.pyのTEMPLATE_DIRSで指定した場所の直下にthanks.htmlを設置してください。
たったこれだけで、Wizardを作ることが出来ます:)