2012-04-26 3 views
0

Я новичок в Django, пытаясь заставить этот фрагмент кода работать как сумматор.Adder using 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: удалить 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 }}"> 
    
+1

или даже более кратким 'request.POST .get ('a', 0) 'и' request.POST.get ('b', 0) ' – dm03514

+0

спасибо !! это действительно полезно !! Большое спасибо – user1282634

+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

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'), 
) 
+0

лучше, чем мои слова =) – okm

+0

Основываясь на твоем. –

+0

спасибо, что кучи !! отлично работают сейчас! Немного больше узнали !!! – user1282634