表单


写一个简单的表单

polls/detail.html

<h1>` poll`.`question `</h1>

{% if error_message %}<p><strong>` error_message `</strong></p>{%


endif %}

<form action="{% url ’polls:vote’ poll.id %}" method="post">

{% csrf_token %}

{% 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_text `


</label><br />

{% endfor %}

<input type="submit" value="Vote" />

</form>



表单提交视图:

from django.shortcuts import get_object_or_404, render

from django.http import HttpResponseRedirect, HttpResponse

from django.core.urlresolvers import reverse

from polls.models import Choice, Poll

# ...

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):

# Redisplay the poll voting form.

return render(request, ’polls/detail.html’, {

’poll’: p,

’error_message’: "You didn’t select a choice.",

})

else:

selected_choice.votes += 1

selected_choice.save()

# Always return an HttpResponseRedirect after successfully dealing

# with POST data. This prevents data from being posted twice if a

# user hits the Back button.

return HttpResponseRedirect(reverse(’polls:results’, args=(p.id,)))


投票结果视图:

def results(request, poll_id):

poll = get_object_or_404(Poll, pk=poll_id)

return render(request, ’polls/results.html’, {’poll’: poll})


投票结果模板:polls/results.html

<h1>` poll`.`question `</h1>

<ul>

{% for choice in poll.choice_set.all %}

<li>` choice`.`choice_text ` -- ` choice`.`votes ` vote{{ choice.votes|


pluralize }}</li>

{% endfor %}

</ul>

<a href="{% url ’polls:detail’ poll.id %}">Vote again?</a>