Home > Back-end >  Simple Math on One Webpage
Simple Math on One Webpage

Time:01-08

I'm currently trying to do something as basic as adding two numbers the user inputs onto the page and showing the result on the same page but I'm running into problems.

index.html

enter image description here

{% extends "project_long_page/base.html" %}

{% block body %}

<form action="." method="POST">

    {% csrf_token %}

    {{ forms }}

    <input type="submit">

</form>

{% endblock %}

views.py

enter image description here

from django.shortcuts import render
import datetime
from django import forms
from django.shortcuts import render


class NewTaskForm(forms.Form):
    num1 = forms.IntegerField(label="Number 1")
    num2 = forms.IntegerField(label="Number 2")


# Create your views here.
def index(request):
    return render(request, "project_long_page/index.html")


def add(request):
    return render(request, "project_long_page/index.html", {
        "form": NewTaskForm()
    })

urls.py

enter image description here

from django.urls import path
from . import views

app_name = "project_long_page"
urlpatterns = [
    path("", views.index, name="index")

]

Current Webpage Output

enter image description here

Desired Webpage Output (While keeping original values inputted)

enter image description here

Thank you for helping if you assist :,)

Edit:

In case you want to see this...

enter image description here

Update 1:

enter image description here

Using the code from @Marco (Thank you @Marco!)

def index(request):
    if request.method == "POST":
        form = NewTaskForm(request.POST)
        if form.is_valid():
            num1 = form.cleaned_data["num1"]
            num2 = form.cleaned_data["num2"]
            result = num1 * num2
            context = {
                "form": NewTaskForm(initial={"num1": num1, "num2": num2}),
                "result": result
            }
            return render(request, "project_long_page/index.html", context)

    form = NewTaskForm()
    return render(request, "project_long_page/index.html", {"form": form})

Updated index.html

{% extends "project_long_page/base.html" %}

{% block body %}

<form action="." method="POST">

    {% csrf_token %}

    {{ form }}

    <input type="submit">
    <br>

    The answer is {{ result }}!

</form>

{% endblock %}

CodePudding user response:

Change your index() view to:

def index(request):
    if request.method == "POST":
        form = NewTaskForm(request.POST)
        if form.is_valid():
            num1 = form.cleaned_data["num1"]
            num2 = form.cleaned_data["num2"]
            result = num1 * num2
            context = {
                "form": NewTaskForm(initial={"num1": num1, "num2": num2}),
                "result": result
            }
            return render(request, "project_long_page/index.html", context)

    form = NewTaskForm()
    return render(request, "project_long_page/index.html", {"form": form})

Then add result to your template.

Did not check if code is working

  •  Tags:  
  • Related