2012-04-26 6 views
0

私はDjangoの初心者です。このスニペットコードを加算器として扱おうとしています。 Djangoを使用した加算器

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

"""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>""" 

しかし、レンダリング、適切な結果を得ることができませんでした。それはどこが間違っていたかはあまり確かではない は、二重引用符 <input type="text" name="result >
  • if request.POST.has_key('a')のチェックが不完全でエラーが発生しやすいが欠けaction=" "
  • にスペースを持っていない任意のコメント

  • 答えて

    0
    • のためのより良いおくります。プラス、resultを計算するのは非推奨has_key()
    • 間違ったロジックの代わりに'a' in request.POSTを使用します。

      <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 }}"> 
      
    • のように、 abresult
    • はテンプレートで、あなたは値をレンダリングする必要がifブランチからresult行を削除テンプレートで

    +1

    、あるいはより簡潔な 'request.POST私は – dm03514

    +0

    'try: a = int(request.POST.get( 'a'、0)) 、B = INT(request.POST.get( 'B'、0)) 除く: = 0 B = 0 '私はそれをテストした 、それは罰金だけでなくではなく、必ず、これがあれば動作しますそうするのがよい練習ですか? @okm @MikeDeSimone – user1282634

    +0

    のように1つのtry-exceptブロック内で結合することができますか?:.get( 'a'、0) 'および' request.POST.get( 'b'、0) ' – user1282634

    1

    、あなたは、aに充填b、およびていません210。どこかを指すような行動も必要です。また、見積もりがありません。

    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変数を必要とし、より多くのエラーチェックを必要としません:フォームを送信すると、データベースのような、永続的な何も変更しないので、最後に、get代わりのpostを使用しています。また、あなたがTemplate毎回作成する必要はありません:url.py

    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タグを作るために名前を必要があります。

    urlpatterns = patterns('',  
        url(r'^add/$', 'myapp.views.add', name='add'), 
    ) 
    
    +0

    私の言葉よりも良い=) – okm

    +0

    あなたに基づいています。 –

    +0

    おかげさまでヒット!!今はうまくいっています! – user1282634

    関連する問題