0

我是 Django 的新手,试图让这段代码作为加法器工作。

"""Perform addition using Django"""

template = """
<form method="post" action=" ">{% csrf_token %}
    <input type="text" name="a" > + <input type="text" name="b" >
    <input type="submit" value="="> <input type="text" name="result >
</form>"""

def add(request):
    if request.POST.has_key('a'):
        a = int(request.POST['a'])
        b = int(request.POST['b'])
        result = request.POST['result'] 

    else:
        a = 0
        b = 0
    t = Template(template)
    c = RequestContext(request, {'a': a, 'b': b, 'result': a+b})
    return HttpResponse(t.render(c))

#url.py
urlpatterns = patterns('',      
    url(r'^add/$', 'myapp.views.add'),   
)

Django加法器

但无法获得正确的结果。不太确定哪里出错了。感谢任何评论

4

2 回答 2

1

在您的模板中,您没有填写abresult。您还需要动作指向某个地方。另外,您缺少报价。最后,使用get而不是post因为提交表单不会更改任何持久性内容,例如数据库:

template = Template("""
<form method="get" action="{% url add %}">{% csrf_token %}
    <input type="text" name="a" value="{{a}}">
    + <input type="text" name="b" value="{{b}}">
    <input type="submit" value="=">
    <input type="text" name="result" value="{{result}}">
</form>""")

您的视图不需要该result变量,并且需要更多的错误检查。此外,您不需要Template每次都创建:

def add(request):
    try:
        a = int(request.POST.get('a', 0))
    except:
        a = 0

    try:
        b = int(request.POST.get('b', 0))
    except:
        b = 0

    c = RequestContext(request, {'a': a, 'b': b, 'result': a + b})
    return HttpResponse(template.render(c))

url.py中,您需要名称才能使url上面的标签起作用:

urlpatterns = patterns('',      
    url(r'^add/$', 'myapp.views.add', name='add'),   
)
于 2012-04-26T13:03:31.397 回答
0
  • 最好不要有空间action=" "
  • 缺少双引号<input type="text" name="result >
  • 的检查if request.POST.has_key('a')不完整且容易出错。另外,使用'a' in request.POST而不是弃用has_key()
  • 计算逻辑错误:从分支result中删除resultif
  • 在模板中,您需要渲染值:和a,比如bresult

    <input type="text" name="a" value="{{ a }}"> +
    <input type="text" name="b" value="{{ b }}">
    <input type="submit" value="="> 
    <input type="text" name="result" value="{{ result }}">
    
于 2012-04-26T12:49:29.917 回答