0

私は 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'),   
)

ジャンゴ加算器

しかし、レンダリングされた適切な結果を得ることができませんでした。どこが間違っていたのかよくわかりません。コメントありがとうございます

4

2 に答える 2

1

テンプレートでは、ab、および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'),   
)
于 2012-04-26T13:03:31.397 に答える
0
  • スペースは入れないほうがいいaction=" "
  • 二重引用符がありません<input type="text" name="result >
  • のチェックif request.POST.has_key('a')は不完全で、エラーが発生しやすいです。さらに、'a' in request.POST非推奨の代わりに使用has_key()
  • 間違った計算ロジック:ブランチから行をresult削除しますresultif
  • テンプレートでは、値をレンダリングする必要があります: abおよび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 }}">
    
于 2012-04-26T12:49:29.917 に答える