2017-01-19 4 views
0

Я пытаюсь показать таблицу умножения числа из формы. Вот моя палитра.Django view не возвращает то, что я хочу

<form method="post" action="/home/result/"> 
    <p>Enter your name</p> 
    <p><input type="text" name="nombre"></p> 
    <p>Enter you last name</p> 
    <p><input type="text" name="apellido"></p> 
    <p>Enter number for the table of that number</p> 
    <p><input type="number" name="table1"></p> 
    <p><input type="submit" name="Submit"></p> 


</form> 

Теперь, вот мой взгляд

@csrf_exempt 
def get_name(request): 
    numbers = [] 
    if request.method == 'POST': 
     nombre = request.POST.get('nombre') 
     apellido = request.POST.get('apellido') 
     table = request.POST.get('table1') 

     for i in range(1, 13): 
      numbers.append(i*table) 

     context = { 
      'nombre': nombre, 
      'apellido': apellido, 
      'numbers': numbers 
     } 

     template = loader.get_template('home/result.html') 

     return HttpResponse(template.render(context, request)) 
    else: 
     template = loader.get_template('home/nombre.html') 
     return HttpResponse(template.render()) 

Вот мой другой вид, result.html

<p>Hello {{ nombre }} {{ apellido }}</p> 
    {% for number in numbers %} 
     {{ number }}<br /> 
    {% endfor %} 

Итак, я вхожу 6, это то, что я вижу. Я попробовал это на своем терминале, и я получил правильный результат. Что это может быть неправильно?

6 
66 
666 
6666 
66666 
666666 
6666666 
66666666 
666666666 
6666666666 
66666666666 
666666666666 

ответ

3

Проблема, с которой вы сталкиваетесь, заключается в том, что «6», которые вы передаете в представление, на самом деле является строкой. Поэтому, когда вы умножаете его, вы выполняете умножение строк, которое просто повторяет строку.

Чтобы это исправить, необходимо преобразовать число в целое, делая int(table)

+0

Обратите внимание, что 'int (table)' может вызвать 'ValueError', если пользователь не отправит номер. Если вы используете [Django forms] (https://docs.djangoproject.com/en/1.10/topics/forms/) и ['IntegerField'] (https://docs.djangoproject.com/en/1.10/ref/forms/fields/# integerfield), то Django позаботится о проверке ввода и преобразовании значения в целое. – Alasdair

0

Чтобы развернуть на другой ответ дается, таблица представляет собой строку, когда вы получите его из почтового тела. Вы должны преобразовать его в целое число с функцией int(). В контексте вашего кода:

def get_name(request): 
numbers = [] 
if request.method == 'POST': 
    nombre = request.POST.get('nombre') 
    apellido = request.POST.get('apellido') 
    table = request.POST.get('table1', 0) # this adds a default, in case table1 is empty 
    table = int(table) # converts the string into an integer 
... 

то вы просто продолжаете, как вы были оттуда.

для справки, вы никогда не должны использовать @csrf_exempt в производственном приложении, если у вас нет действительно хорошей причины для этого.

 Смежные вопросы

  • Нет связанных вопросов^_^