Как умножить пользовательский ввод на Django - PullRequest
1 голос
/ 02 марта 2020

Я хочу создать простое представление, которое принимает пользовательский ввод (число) и отображает на другой странице это число, умноженное на 2.

мой код:

views.py

def multiply(request):
    if request.method == 'POST':
        data = request.POST.get("decimalfield")
        twice = data * 2
        return render(request, 'multiply.html', twice)

input. html

<form method="POST" action="{% url 'input' %}">
    <input type="text" name="decimalfield">
    <button type="submit">Upload text</button>
</form>

Моя проблема в том, что это не работает, теперь я получаю ошибку: представление .views.multiply не возвращало объект HttpResponse. Вместо этого он вернул None.

Моя вторая проблема - я не знаю, как отобразить этот результат на второй странице, а не на этой же. Должны ли URL-адреса выглядеть как мои?

urls.py

path('input', views.multiply, name='input'),
path('multiply', views.multiply, name='multiply'),

Я действительно удручен, потому что это так просто, и я не могу этого сделать.

Ответы [ 3 ]

1 голос
/ 02 марта 2020

параметры должны быть словаря. views.py:

def multiply(request):
    if request.method == 'POST':
        data = request.POST.get("decimalfield")
        twice = data * 2
        return render(request, 'multiply.html', {'twice':twice})
    return render(request, 'input.html')

почему у вас есть два URL-адреса, указывающие на один вид? какой второй? удалить его

path('input', views.multiply, name='input'),
# path('multiply', views.multiply, name='multiply'),

создать умножить. html и отрендерить дважды :

<p>{{ twice }}</p>
1 голос
/ 02 марта 2020

Что я нашел, чтобы работать для меня:

views.py:

def input(request):
    return render(request, 'input.html', {})

def multiply(request):
    if request.method == 'POST':
        data = request.POST.get("decimalfield")
        twice = int(data) * 2
        return render(request, 'multiply.html', {'twice':twice})

urls.py:

path('input', views.input, name='input'),
path('multiply', views.multiply, name='multiply'),

input. html

<form method="POST" action="{% url 'multiply' %}">
    {% csrf_token %}
    <input type="text" name="decimalfield">
    <button type="submit">Upload text</button>
</form>

умножить. html

<label>{{ twice }}</label>
0 голосов
/ 02 марта 2020

Хорошо, потому что первый метод, когда вы попадаете на страницу через url (name = 'input'), это запрос, чтобы они не повторяли рендеринг, потому что его внутри метода POST теперь можно редактировать:

def multiply(request):
  if request.method == 'POST':
    data = request.POST.get("decimalfield")
    twice = {'data':data*2 }
    return render(request, 'multiply.html', twice)
  return render(request, 'multiply.html')
...