如何使用Django

时间:2019-09-01 04:06:19

标签: python html django

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

0 个答案:

没有答案