修改polls/detail.html文件,写一个表单

<form action=”{% urlpolls:votequestion.id %}” method=”post“>
    {% csrf_token %}
    <fieldset&gt;
        <legend&gt;<h1&gt;{{ question.question_text }}</h1&gt;</legend&gt;
        {% if error_message %}<p&gt;<strong&gt;{{ error_message }}</strong></p>{% endif %}
        {% for choice in question.choice_set.all %}
            <input type=”radioname=”choiceid=”choice{{ forloop.counter }}” value=”{{ choice.id }}”>
            <label for=”choice{{ forloop.counter }}”>{{ choice.choice_text }}</label><br>
        {% endfor %}
    </fieldset>
    <input type=”submitvalue=”Vote“>
    </form>

修改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,)))

结果方法

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页面内容为:

好用少的代码

修改polls/urls.py文件为:

from django.urls import path
from . import views

app_name = “polls
urlpatterns = [
    path(“”, views.IndexView.as_view(), name=”index“),
    path(“<int:pk>/”, views.DetailView.as_view(), name=”detail“),
    path(“<int:pk>/results/”, views.ResultsView.as_view(), name=”results“),
    path(“<int:question_id>/vote/”, views.vote, name=”vote”),
]

修改视图

修改文件polls/views.py

from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.views import generic
from .models import Choice, Question

class IndexView(generic.ListView):
    template_name = “polls/index.html
    context_object_name = “latest_question_list

    def get_queryset(self):
        “””Return the last five published questions.”””
        return Question.objects.order_by(“-pub_date“)[:5]

class DetailView(generic.DetailView):
    model = Question
    template_name = “polls/detail.html

class ResultsView(generic.DetailView):
    model = Question
    template_name = “polls/results.html”

可以重新在网址测试下。

原文地址:https://blog.csdn.net/computerclass/article/details/134515294

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_46614.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注