我是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'),
)
但无法获得正确的结果。不太确定哪里出错了。 赞赏任何评论
答案 0 :(得分:1)
在您的模板中,您没有填写a
,b
和result
。你还需要动作指向某个地方。另外,你错过了一个报价。最后,使用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
行在模板中,您需要呈现值:a
,b
和result
,例如
<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 }}">