フォームの処理は 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/ へアクセスすると、今まで登録したブログ記事が 一覧で出力される。
参考文献