Django 入门学习总结5

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

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

{% csrf_token %}

<fieldset>

<legend><h1>{{ question.question_text }}</h1></legend>

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

{% 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 %}

</fieldset>

<input type="submit" value="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"

可以重新在网址上测试下。

相关推荐
QiZhang | UESTC12 分钟前
学习日记day76
学习
久邦科技19 分钟前
20个免费电子书下载网站,实现电子书自由(2025持续更新)
学习
Coder_Boy_32 分钟前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
Gain_chance34 分钟前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
helloworldandy40 分钟前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
Gain_chance2 小时前
36-学习笔记尚硅谷数仓搭建-DWS层数据装载脚本
大数据·数据仓库·笔记·学习
XH华2 小时前
备战蓝桥杯,第九章:结构体和类
学习·蓝桥杯
数据知道2 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql
qq_12498707532 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha2 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全