Как напечатать значение, полученное из формы в Django? - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь создать форму, которая просит пользователя ввести значение, выполнить некоторые вычисления и показать результаты обратно пользователю.Вот что я сделал: я создал приложение под названием 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 голосов
/ 08 июня 2019

В 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()})
0 голосов
/ 08 июня 2019

В вашей реализации несколько проблем.

Во-первых, первый аргумент любого представления всегда 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()})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...