如何打印从Django中的表单获取的值?

时间:2019-06-08 15:53:51

标签: python django django-models django-forms django-views

我正在尝试创建一个表单,要求用户输入一个值,对其进行一些计算,然后将结果显示给用户。 这是我所做的: 我创建了一个名为QMarcum的应用程序。在此应用程序中,我有以下views.py,forms.py和urls.py:

views.py

from django.shortcuts import render
from scipy.integrate import quad
import scipy, numpy, math
from scipy import integrate
from django.http import HttpResponse
from .forms import Calculate

def integrand(x):
    Q_y = (1/(math.sqrt(2*math.pi)))*math.exp((-x**2)/2)
    return Q_y
    y = Calculate.y
    ans, err = quad(integrand, float(y), math.inf)
    print(ans)
    return render(request, 'test.html', {'form': Q_y})

forms.py

from django import forms

class Calculate(forms.Form):
    y = forms.FloatField()

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('form', views.integrand),
]

form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="post">
        {% csrf_token %}
        {{ form }}
        <button type="submit">Submit</button>
    </form>
</body>
</html>

该表格要求用户输入一个值(y)(y成功打印在终端上),但是,print(ans)不会打印该值,我也不会知道如何向用户显示计算结果(ans)。

谢谢。

2 个答案:

答案 0 :(得分:0)

在实现过程中遇到一些问题。

首先,任何视图的第一个参数始终为request。通过该对象,您可以访问有关用户浏览器发出的请求的许多不同变量。

在这种情况下,您想用从用户那里收到的数据来“填充”表单,但是您还希望显示页面,以便用户看到表单。

如果用户正在访问页面,您要执行的操作是返回html,如果用户提交了表单,则接受信息。

为此,您需要将不同的HTTP方法之间的逻辑分开:

  • GET返回HTML
  • POST接受信息
from django.http import HttpResponse
from .forms import Calculate

def integrand(request):
    if request.method == 'POST':       # accept the information
        form = Calculate(request.POST) # "populate" a form with that data
        print(form.data["y"])          # print the value of y
        # add additional logic with the data here
        return HttpResponse("Thank you for submitting!")
    else: # show the form to the user
        return render(request, 'test.html', {'form': Calculate()})

答案 1 :(得分:0)

在views.py中,什么是Quad会导致许多错误,我不知道该功能。

from django.shortcuts import render,HttpResponse
from scipy.integrate import quad
import scipy, numpy, math
from scipy import integrate
from django.http import HttpResponse
from .forms import Calculate
from django.shortcuts import render


from django.http import HttpResponse
from .forms import Calculate

def integrand(request):
    if request.method == 'POST':       # accept the information
        form = Calculate(request.POST) # "populate" a form with that data
        print(form.data["y"])
        y=int(form.data["y"])
        # print the value of y
        Q_y = (1 / (math.sqrt(2 * math.pi))) * math.exp((-y ** 2) / 2)
        y = Q_y
        #ans = quad(integrand, float(y), math.inf)
        print(Q_y)

        return HttpResponse(str(Q_y))
    else: # show the form to the user
        return render(request, 'forms.html', {'form': Calculate()})