使用Django的加法器

时间:2012-04-26 12:41:32

标签: python 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

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

2 个答案:

答案 0 :(得分: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'),   
)

答案 1 :(得分:0)

  • 最好不要在action=" "
  • 中留出空间
  • 缺少双引号<input type="text" name="result >
  • if request.POST.has_key('a')的检查不完整且容易出错。另外,请使用'a' in request.POST而不是弃用has_key()
  • 计算result的错误逻辑:从result分支中删除if
  • 在模板中,您需要呈现值: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 }}">