Django的新手,我陷入了一个问题。我在页面上有几个按钮,每个按钮都是我创建的一个简单Color对象的实例。该对象的属性为“名称”(字符串),“十六进制”(字符串)和“计数”(整数)。我希望能够跟踪每个按钮被按下了多少次;因此,例如,如果有人按下与“红色”相关的按钮,它将发布到数据库中,“红色”的“计数”属性应增加1。
基本上,这就是'vote'函数在Django文档中显示的应用程序中的工作方式,但即使我的程序更简单,我也无法弄清楚如何将其应用于我的程序。任何建议表示赞赏。如果我已发布足够的代码来确定问题,请告诉我。
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from django.template import loader
from .models import Color
### function in question ###
def detail(request, colorname):
bodybg = colorname
colorslist = Color.objects.all()
colorcount = 0
for color in colorslist:
if colorname == color.hex:
colorcount = color.count
colorCounterObj = get_object_or_404(Color, pk=colorcount)
selected_color = colorCounterObj.choice_set.get(pk=request.POST['choice'])
selected_color.count += 1
selected_color.save()
context = {
'bodybg' : bodybg,
'colorslist' : colorslist,
'colorcount' : colorcount,
}
template = loader.get_template('colortime/detail.html')
return HttpResponse(template.render(context, request))
<!-- HTML on my index page, where the buttons are. Makes a list of buttons in different colors, that works just fine. Not sure if my 'formaction' is worded properly or really even functional -->
<body>
<center>
{% if colorslist %}
<ul>
{% for color in colorslist %}
<li ><h3 class='button' style='background-color:{{ color.hex }};' formaction="{% url 'colortime:detail' color %}" method="post" name='choice'><a href="/color/{{ color.hex }}/">{{ color.name }}</a></h3></li>
{% endfor %}
</ul>
{% else %}"
<p>No colors here.</p>
{% endif %}
</center>
</body>
现在我得到的错误是: 找不到页面(404) 请求方法:GET 要求网址:http://127.0.0.1:8000/color/0000FF/ 提出者:colortime.views.detail 没有颜色与给定查询匹配。
根据我按下的按钮的不同,URL也会略有不同,但是它们都是这样做的。
编辑:下面的Models.py和Urls.py
from django.urls import path
from . import views
app_name = 'colortime'
urlpatterns = [
path('', views.index, name='index'),
path('<str:colorname>/', views.detail, name='detail'),
]
from django.db import models
from django import forms
# Create your models here.
class Color(models.Model):
hex = models.CharField(max_length=6)
name = models.CharField(max_length=50)
count = models.IntegerField(default=0)
def __str__(self):
return self.name