フォームの処理は django.forms.Form クラスにまとめられている。 そこでこのクラスを継承したクラスの定義をする。
class フォームクラス(django.forms.Form):
ここではブログ記事投稿フォームをEntryFormクラスと名づけて、mysite/blog/forms.py へ定義する。
from django import forms class EntryForm( forms.Form ): title = forms.CharField( label = 'Title', ) body = forms.CharField( label = 'Body', widget = forms.Textarea(), )
from django.http import HttpResponse, HttpResponseRedirect from django.template import loader, RequestContext def new( request ): # EntryFormインスタンスを生成 from blog.forms import EntryForm if request.method == 'POST': form = EntryForm( request.POST ) else : form = EntryForm() if form.is_valid(): from blog.models import Entry new_entry = Entry() new_entry.title = form.cleaned_data[ 'title' ] new_entry.body = form.cleaned_data[ 'body' ] new_entry.save() return HttpResponseRedirect( '/blog/' ) contexts = RequestContext( request, { 'form': form, } ) template = loader.get_template( 'blog/new.html' ) return HttpResponse( template.render( contexts ) )
mysite/templates/blog/new.html へ作成する。
<html> <head> <title>blogTest</title> </head> <body> <form action ="" method ="post"> <table><tbody> {{form}} <tr><td cols = "2"> <input type = "submit" value = "SUBMIT" /> </td></tr> </tbody></table> </form> </body> </html>
mysite/urls.py に ( r'^blog/new/$', 'blog.views.new' ), を追記。
urlpatterns = patterns('', ... url(r'^admin/', include(admin.site.urls)), ( r'^blog/new/$', 'blog.views.new' ), )
mysite/blog/views.py の追記。
def index( request ): from blog.models import Entry rows = Entry.objects.all().order_by( '-created_at' ) contexts = RequestContext( request, { 'rows':rows, }) template = loader.get_template( 'blog/index.html' ) return HttpResponse( template.render( contexts ) )
mysite/templates/blog/index.html にテンプレートを作成する。
<html> <head> <title>list</title> </head> <body> <h1>list</h1> {% for row in rows %} <div><h2>{{ row.title }}</h2></div> <div>Created at {{ row.created_at|date:"Y/m/d"}}</div> <div>{{row.body}}</div> {% endfor %} </body> </html>
mysite/urls.py の編集。以下を urlpatternsに追記。
( r'^blog/$', 'blog.views.index' ),
以上で http://0.0.0.0:8000/blog/ へアクセスすると、今まで登録したブログ記事が 一覧で出力される。
参考文献