Передача данных из представления Django в шаблон - PullRequest
0 голосов
/ 12 сентября 2018

Я хотел бы отобразить данные из представления после расчета в шаблон.Представление собирает данные из формы Django, а затем выполняет простой расчет.Однако функция не перенаправляет на шаблон.

 views.py

    from . import forms
    from django.http import HttpResponseRedirect
    from django.shortcuts import render,redirect

    def index(request):
        form = forms.InputForm()
        return render(request, 'index.html', {'form': form})


    def addition(a,b):
        c = a + b
        return c


    def input_form_Addition(request):
        if request.method == 'post':
           form = forms.InputForm(request.POST)
           if form.is_valid():
              input1 = form.cleaned_data['input1']
              input2 = form.cleaned_data['input2']
              total = addition(input1,input2)

              return render(request, 'output.html', {'total': total})
        else:
             form = forms.InputForm()

Шаблон (output.html) выглядит следующим образом:

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>Forms</title>

    </head>
    <body>

      <p>The Sum is {{ total }}</p>

    </body>
    </html>

Моя URL-маршрутизация выглядит следующим образом:

    from django.urls import path
    from .views import index
    from simple_addition import views

      urlpatterns = [
           path('', views.index, name='index'),
           path('output/', views.input_form_Addition, name='output')
             ]

Моя форма Django хорошо отображается и выглядит следующим образом.

forms.py из форм импорта django

    class InputForm(forms.Form):
       input1 = forms.FloatField()
       input2 = forms.FloatField()

И отображается по адресу:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Forms</title>

   </head>
   <body>
      <h2>Addition Page</h2>
      <p>Fill in two numbers to get their sum</p>

      <form method="post">
           {% csrf_token %}
           {{ form.as_p }}
      <input type="submit" value="Add" >
      </form>
    </body>
    </html>

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Просто замените строку в функциях input_form_Addition (запрос):

if request.method == 'post':

с

if request.method == 'POST':
0 голосов
/ 12 сентября 2018

Можете ли вы поставить код формы? (template and forms.py)

редактировать:

Хорошо, я нахожу вашу проблему:

<form method="post">
       {% csrf_token %}
       {{ form.as_p }}
  <input type="submit" value="Add" >

Вы пропустили действие для почтовой формы:

шаблон формы:

<form method="post" action="/output/">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Add" >
</form>

urls.py

path('output/', views.input_form_Addition, name='output')

views.py

from . import forms
from django.http import HttpResponseRedirect
from django.shortcuts import render,redirect

def index(request):
    form = forms.InputForm()
    return render(request, 'index.html', {'form': form})


def addition(a,b):
    c = a + b
    return c


def input_form_Addition(request):
form = forms.InputForm(request.POST)
if form.is_valid():
    input1 = form.cleaned_data['input1']
    input2 = form.cleaned_data['input2']
    total = addition(input1, input2)

    return render(request, 'output.html', {'total': total})
...