python django 表单【Part4】

表单


写一个简单的表单

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>


你可能感兴趣的:(python,表单,choice)