Django:类函数不返回页面

Posted lland5201314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django:类函数不返回页面相关的知识,希望对你有一定的参考价值。

我正在尝试为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便运行SparcCalc函数,收集输入的信息,执行数学运算并收集总计,然后将总计发送到新页面。相反,它似乎只是在刷新页面。

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

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

from catalog.views import (
    SparkCalc,
    sparkCalcPage,
)

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

任何帮助将不胜感激,并在此先感谢您的帮助。

解决方案
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>

更多内容关注个人公众号。持续更新干货。

在这里插入图片描述

以上是关于Django:类函数不返回页面的主要内容,如果未能解决你的问题,请参考以下文章

HTML代码片段

HTML代码片段

Django 视图

django-基于类的视图

Django的View(视图)settings源码的解析模板层

django-视图函数进阶