2012-04-26 27 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