Django类函数不返回页面

2024-09-29 22:15:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为我的Django站点创建代码,该站点将接受用户的输入,执行计算,然后以新页面的形式将数据发送回用户,但是每次我运行代码时,它都不会创建新页面,也不会发布结果

下面是函数本身

def SparkCalc(request):
    new_item = sparkCalculator()
    new_item.tix = request.POST['tix']
    new_item.tenrolls = request.POST['tenrolls']
    new_item.crystals = request.POST['crystals']
    new_item.save()
    total = new_item.getTotal()
    return render(request, 'SparkResults.html', {"title": "Spark Results"}, {"total": total})

下面是我称之为Django的页面:

<form action="/SparkCalc/" method="POST">{% csrf_token %}
    <label for ="tix">Please enter your single roll tickets</label>
    <input type="text" id="tix" name="tix"/>
    <label for ="tenrolls">Please enter your ten-roll tickets</label>
    <input type="text" id="tenrolls" name="tenrolls"/>
    <label for ="tix">Please enter your total crystal amount</label>
    <input type="text" id="crystals"name="crystals"/>
    <input type="submit" value="Get Results"/>    
</form>

最后,下面是我创建的类:

class sparkCalculator(models.Model): 
    tix = models.PositiveIntegerField()
    tenrolls = models.PositiveIntegerField()
    crystals = models.PositiveIntegerField()

    def getTotal(self): 
        return (int(self.tix)*300) + (int(self.tenrolls)* 3000) + int(self.crystals)

我设想代码的工作方式是,一旦用户将其信息输入表单,Django就会运行SPARCALC函数,收集输入的信息,执行数学运算并收集总数,然后将总数发送到新页面。相反,它似乎只是在刷新页面

也可以运行这种风格的代码而不为其创建整个类吗?这不是我想要存储的信息。理想情况下,我只希望它在运行时执行并使用它来完成,但以前尝试这样做的尝试都失败了,我只是放弃并尝试创建一个类

据我所知,它已正确地输入到我的urlpatterns中

from catalog.views import (
    SparkCalc,
    sparkCalcPage,
)

urlpatterns = [
    path('SparkCalc/', sparkCalcPage),
    path('SparkResults/', SparkCalc),
]

任何帮助都将不胜感激,并提前感谢您的帮助


Tags: 代码selfnewinputmodelsrequesttypeitem
2条回答

render函数的签名如下:

def render(request, template_name, context=None, content_type=None, ...):
   ...

在本例中,您将{'total':total}传递给了content_type关键字参数,而不是context

# also make sure 'SparkResults.html' can be found by the template loader 
render(request, 'SparkResults.html', {"title": "Spark Results", "total": total})

此外,您还需要将数据提交到相应的视图

<form action="/SparkResults/" method="POST">
  {% csrf_token %}
    ...   
</form>

而不是为任务创建模型, 在views.py自身中执行该操作

def SparkCalc(request):
    tix = request.POST['tix']
    tenrolls = request.POST['tenrolls']
    crystals = request.POST['crystals']
    total = (int(tix)*300) + (int(tenrolls)* 3000) + int(crystals)
    return render(request, 'SparkResults.html', {"title": "Spark Results"}, {"total": total})

相关问题 更多 >

    热门问题