2012-04-26 70 views
0

我是Django的新手,试图让这个代码片段作为加法器工作。使用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 Adder

,但无法获得正确的渲染结果。不太确定它出错的地方。 赞赏的任何意见

回答

0
  • 最好不要在action=" "
  • 缺少双引号<input type="text" name="result >
  • if request.POST.has_key('a')检查是不完全的,容易出错的空间。另外,使用'a' in request.POST代替过时has_key()
  • 计算result错误的逻辑:从if分支
  • 模板,你需要渲染的值删除result行:abresult,像

    <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 }}"> 
    
+1

甚至更​​简洁'request.POST .get('a',0)'和'request.POST.get('b',0)' – dm03514 2012-04-26 12:56:33

+0

谢谢!!这真的很有帮助!!非常感谢 – user1282634 2012-04-26 23:09:16

+0

我可以在一个try-except块内组合如下: 'try: a = int(request.POST.get('a',0)) b = int(request.POST.get('b',0)) 除外: a = 0 b = 0' 我测试过了,它工作正常,但不知道这是否是良好的做法呢? @okm @MikeDeSimone – user1282634 2012-04-27 07:07:13

1

在您的模板中,您没有填写a,bresult。您还需要将动作指向某处。此外,你错过了一个报价。最后,使用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'), 
) 
+0

比我的话更好=) – okm 2012-04-26 13:06:25

+0

基于你的。 – 2012-04-26 13:07:00

+0

感谢堆!!现在工作正常!!有点更多的了解! – user1282634 2012-04-26 23:08:22