写一个简单的表格
让我们从上一个教程更新我们的民意调查详细信息模板(“polls / detail.html”),以便模板包含一个HTML 元素:
<h1>{{ question.question_text }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action=\"{% url \'polls:vote\' question.id %}\" method=\"post\">
{% csrf_token %}
{% for choice in question.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>
现在,让我们创建一个Django视图来处理提交的数据并对其进行处理。请记住,在教程3中,我们为包含以下行的民意调查应用程序创建了一个URLconf:
path(\'<int:question_id>/vote/\', views.vote, name=\'vote\'),
我们还创建了该vote()函数的虚拟实现。让我们创建一个真实版本。将以下内容添加到polls/views.py:
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from .models import Choice, Question
# ...
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
selected_choice = question.choice_set.get(pk=request.POST[\'choice\'])
except (KeyError, Choice.DoesNotExist):
# Redisplay the question voting form.
return render(request, \'polls/detail.html\', {
\'question\': question,
\'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=(question.id,)))
在某人投票问题后,该vote()视图会重定向到问题的结果页面。让我们写下这个观点:
from django.shortcuts import get_object_or_404, render
def results(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, \'polls/results.html\', {\'question\': question})
现在,创建一个polls/results.html模板:
<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}</li>
{% endfor %}
</ul>
<a href=\"{% url \'polls:detail\' question.id %}\">Vote again?</a>
未完待续…
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

