我正在尝试创建一个分子量计算器网页,用户输入化学公式并获得质量。我使用raw_input()在python中完成了这项工作,但现在我需要使用带有django的表单。
我设置了html表单,但是当我点击“提交”时,页面再次显示自己。 我想要发生的是:
但是,我不知道如何做到这一点,因为我已经查看了教程和表单文档。
这是我的views.py:
from django.shortcuts import render from django.db import connection from django.http
import HttpResponseRedirect from django.core.urlresolvers
import reverse import sys, re
def index(request):
if request.method == "POST":
return HttpResponseRedirect(reverse('MolecularMass:result'))
else:
return render(request, 'MolecularMass/index.html')
def result(request):
c = connections['default'].cursor()
def FindEndParentheses(separated):
count = 0
for index, val in enumerate(separated):
if val == ')':
count -= 1
if count == 0:
return index
elif val == '(':
count += 1
raise NameError('Please close the parentheses')
def GetAtomicMass(val):
c.execute("SELECT Atomic_Weight FROM Elements WHERE Atomic_Numer=%s" % val)
return c.fetchone[0]
def Parser(separated, total):
if len(separated) == 0:
return sum(total)
val = separated[0]
if val == '(':
end = FindEndParentheses(separated)
total.append(Parser(separated[1:end], []))
return Parser(separated[end + 1:], total)
elif val.isdigit():
total[-1] *= int(val)
else:
total.append(GetAtomicMass(val))
return Parser(separated[1:], total)
def CalcMolecularMass(formula):
separated = re.findall(r'[A-Z][a-z]*|\d+|\(|\)', formula)
return('The molecular mass of {} is {:.3f}\n'.format(formula, Parser(separated, [])))
return render(request, 'MolecularMass/result.html', CalcMolecularMass(formula))
我的index.html:
<h1>Enter a chemical formula to get its molecular mass</h1>
<form action="{% url 'MolecularMass:result' %}" method="POST">
{% csrf_token %}
<input type="text" name="formula"/>
<input type="submit" value="Submit"/>
</form>
我的result.html:
{{ content }}
答案 0 :(得分:0)
有几种方法可以做到这一点。我能想到的最简单的方法是在index.html模板上为你的提交按钮定义一个onclick事件监听器,它调用一些负责触发视图的javascript函数。在序列化后将表单数据作为参数发送。然后,您应该能够操作数据并使用return render(request, 'your_app/result_url', context)
context参数是可选的。
Django文档要求您遵循的一些做法,例如将您的表单(您尝试输入数据的地方)放在forms.py文件中。这使得一切都更容易调试。
我强烈建议您正确阅读Django Forms
一旦你这样做,事情就会变得清晰。看看Dajax和Dajaxice。这些使应用程序内的异步调用非常容易。例如,dajax.assign()方法允许您从视图中操作HTML元素及其属性,并返回json对象,这将使您的用例中的内容变得非常简单。