はじめての Django アプリ作成、その 4 (1)
電池の残量 15050 mWh ですがもう少しネバってみる。
次のその 4 は簡単なフォームについてのナニ。ドキュメントの量自体はそれほどでも無いのですがどうなるか。
まず detail なテンプレ更新。
<h1>{{ poll.question }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action="/polls/{{ poll.id }}/vote/" method="post">
{% for choice in poll.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}"
value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice }}</label><br />
{% endfor %}
<input type="submit" value="投票する" />
</form>で mysite/polls/views.py 修正
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from mysite.polls.models import Choice, Poll
def index(request):
latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
return render_to_response('polls/index.html',
{'latest_poll_list': latest_poll_list})
def detail(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
return render_to_response('polls/detail.html', {'poll': p})
def vote(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# Poll 投票フォームを再表示します。
return render_to_response('polls/detail.html', {
'poll': p,
'error_message': "選択肢を選んでいません。",
})
else:
selected_choice.votes += 1
selected_choice.save()
# ユーザが Back ボタンを押して同じフォームを提出するのを防ぐ
# ため、POST データを処理できた場合には、必ず
# HttpResponseRedirect を返すようにします。
return HttpResponseRedirect(reverse('mysite.polls.views.results', args=(p.id,)))views.py に results も追加
def results(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
return render_to_response('polls/results.html', {'poll': p})テンプレも追加
<h1>{{ poll.question }}</h1>
<ul>
{% for choice in poll.choice_set.all %}
<li>{{ choice.choice }} -- {{ choice.votes }} 票</li>
{% endfor %}
</ul>DRY 違反は別途その対処が出てくる模様。でブラウザでアクセスしたら文字化け。帰宅後に emacs22 入れる必要ありだな。UTF がしゃべれない。ってか文字コードの変え方忘れたし。