Django无法处理html表单数据

时间:2016-03-01 22:37:24

标签: python html django django-templates django-views

我有一个简单的Django站点,我想从第一个框中传递数据,并将该值加上5返回到页面上的第二个表单框。我后来计划用第一个值进行数学计算,但这会让我开始。我在检索表单数据时遇到了很多麻烦。我知道我需要在views.py文件中创建一个函数来处理表单,我需要在URLs.py中放一些东西来检索表单数据。我已经尝试过教程中的所有内容,但无法弄明白。

我的html模板是一个简单的页面,其中包含一个包含两个字段和一个提交按钮的表单。 Django runserver拉出html页面就好了。这是我的代码:

Views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
from django import forms

def index(request):
    return render(request, 'brew/index.html')

 #Here I want a function that will return my form field name="input", 
 #and return that value plus 5 to the form laveled name="output". 
 #I will later us my model to do math on this, but I cant get 
 #this first part working

urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),    
]

这是我的html模板,index.html:

<html>
<head>
<title>Gravity Calculator</title>
</head>
<body>
<h1>Gravity Calculator</h1>
<p>Enter the gravity below:</p>
<form action="/sendform/" method = "post">
    Enter Input: <br>
    <input type="text" name="input"><br>
    <br>
    Your gravity is: <br>
    <input type="text" name="output" readonly><br>
    <br>
    <input type="submit" name="submit" >        
</form>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

您需要将结果填充到模板可以访问的上下文变量。

视图:

def index(request):
    ctx = {}
    if request.method == 'POST' and 'input' in request.POST:
        ctx['result'] = int(request.POST.get('input', 0)) + 5
    return render(request, 'brew/index.html', ctx)

然后在你的模板中:

<html>
<head>
<title>Gravity Calculator</title>
</head>
<body>
<h1>Gravity Calculator</h1>
<p>Enter the gravity below:</p>
<form action="/sendform/" method = "post">
    Enter Input: <br>
    <input type="text" name="input"><br>
    <br>
    Your gravity is: <br>
    <input type="text" name="output" value="{{ result }}" readonly><br>
    <br>
    <input type="submit" name="submit" >        
</form>
</body>
</html>

看起来你是Django的新手,我建议:

  • 使用基于方法的视图,直到您对此感到满意为止,然后
  • 开始使用基于类的视图,优点是代码可重用性,但最终基于类的视图吐出视图方法,这很好 参考网站是ccbv.co.uk
  • 使用表单类