如何在不使用模型的情况下在Django模板中显示python变量值?

如何在不使用模型的情况下在Django模板中显示python变量值?,python,django,Python,Django,我是Django的新手,目前正面临这个问题。我想计算一个圆的面积和周长,并将结果发布到Django模板中。我使用了一个表单,允许用户输入任何被视为半径的数字。使用POST方法,它将对其进行处理并输出面积和周长(在views.py文件中)。但是,我无法在Django模板HTML页面中显示面积和周长值。我在模型中存储的唯一值是用户输入的半径值。如何在不使用模型的情况下显示面积和周长 表单半径输入的HTML页面:insert_radius.HTML 用于显示输出的HTML页面:view_result.

我是Django的新手,目前正面临这个问题。我想计算一个圆的面积和周长,并将结果发布到Django模板中。我使用了一个表单,允许用户输入任何被视为半径的数字。使用POST方法,它将对其进行处理并输出面积和周长(在views.py文件中)。但是,我无法在Django模板HTML页面中显示面积和周长值。我在模型中存储的唯一值是用户输入的半径值。如何在不使用模型的情况下显示面积和周长

表单半径输入的HTML页面:insert_radius.HTML
用于显示输出的HTML页面:view_result.HTML

请帮忙

myapp/models.py:

from django.db import models

# Create your models here.
class Circle(models.Model):
    radius = models.IntegerField(default = 0)
    def __str__(self):
        return str(self.radius)
myapp/forms.py

from django import forms
from myapp.models import Circle

class CircleForm(forms.ModelForm):
    class Meta:
        model = Circle
        fields = ["radius"]
import math
from django.shortcuts import render
from django.views.generic import TemplateView, CreateView, ListView
from myapp.forms import CircleForm
from django.urls import reverse_lazy
from myapp.models import Circle
from django.http import HttpResponseRedirect

# Create your views here.

class HomeView(TemplateView):
    template_name = 'home.html'

class CircleView(CreateView):
    form_class = CircleForm
    template_name = 'insert_radius.html'

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            radius =  form.cleaned_data.get('radius')
            area = math.pi * (radius ** 2)
            perimeter = 2 * math.pi * radius
            print(radius, area, perimeter)
            form.save()
            final= {"radius" : radius, "area" : area, "perimeter": 
 perimeter}
            context= {'final': final}
            return HttpResponseRedirect(reverse_lazy("view_result"))
            return render(request, "view_result.html", context) 


        else:
            form = self.form_class()

class ViewResult(ListView):
    template_name = 'view_result.html'
    model = Circle
from django.urls import path
from myapp.views import HomeView, CircleView, ViewResult

urlpatterns = [
   path('home', HomeView.as_view(), name = 'home'),
   path('insert_radius', CircleView.as_view(), name = 'insert_radius'),
   path('view_result', ViewResult.as_view(), name = 'view_result'),
]
myapp/views.py

from django import forms
from myapp.models import Circle

class CircleForm(forms.ModelForm):
    class Meta:
        model = Circle
        fields = ["radius"]
import math
from django.shortcuts import render
from django.views.generic import TemplateView, CreateView, ListView
from myapp.forms import CircleForm
from django.urls import reverse_lazy
from myapp.models import Circle
from django.http import HttpResponseRedirect

# Create your views here.

class HomeView(TemplateView):
    template_name = 'home.html'

class CircleView(CreateView):
    form_class = CircleForm
    template_name = 'insert_radius.html'

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            radius =  form.cleaned_data.get('radius')
            area = math.pi * (radius ** 2)
            perimeter = 2 * math.pi * radius
            print(radius, area, perimeter)
            form.save()
            final= {"radius" : radius, "area" : area, "perimeter": 
 perimeter}
            context= {'final': final}
            return HttpResponseRedirect(reverse_lazy("view_result"))
            return render(request, "view_result.html", context) 


        else:
            form = self.form_class()

class ViewResult(ListView):
    template_name = 'view_result.html'
    model = Circle
from django.urls import path
from myapp.views import HomeView, CircleView, ViewResult

urlpatterns = [
   path('home', HomeView.as_view(), name = 'home'),
   path('insert_radius', CircleView.as_view(), name = 'insert_radius'),
   path('view_result', ViewResult.as_view(), name = 'view_result'),
]
模板/insert_radius.html

<!DOCTYPE html>
<html>
<head>
    <title> Insert radius </title>
</head>
<body>

    <h1> Enter radius </h1>
    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        {{form}}
        <button type="submit"> Submit </button>
    </form>

</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <title> View result </title>
</head>
<body>

    Area: {{final.area}} <br>
    Perimeter: {{final.perimeter}} <br>

</body>
</html>

首先,您的
CircleView
有太多的样板代码。事实上,
CreateView
的主要用例是让Django处理创建视图:

# app/views.py

from django.urls import reverse

class CircleView(CreateView):
    form_class = CircleForm
    template_name = 'insert_radius.html'

    def get_success_url(self):
        return reverse('view_result', kwargs={'pk': self.object.pk})
接下来,我们可以向圆添加一些功能来计算周长:

# app/models.py

from math import pi

class Circle(models.Model):
    radius = models.IntegerField(default=0)

    @property
    def perimeter(self):
        return 2*pi*self.radius

    def __str__(self):
        return str(self.radius)

最后,在我们的视图中,我们可以使
ViewResult
成为detailview,并将圆变量重命名为
final

# app/urls.py

from django.urls import path from myapp.views import HomeView, CircleView, ViewResult

urlpatterns = [ path('home', HomeView.as_view(), name = 'home'), path('insert_radius', CircleView.as_view(), name = 'insert_radius'), path('view_result/<int:pk>', ViewResult.as_view(), name = 'view_result'), ]
#app/views.py
从django.views.generic.detail导入DetailView
从app.models导入循环
类视图结果(详细视图):
模板名称='查看结果.html'
模型=圆

context\u object\u name='final'
首先,您的
循环视图有太多的样板代码。事实上,
CreateView
的主要用例是让Django处理创建视图:

# app/views.py

from django.urls import reverse

class CircleView(CreateView):
    form_class = CircleForm
    template_name = 'insert_radius.html'

    def get_success_url(self):
        return reverse('view_result', kwargs={'pk': self.object.pk})
接下来,我们可以向圆添加一些功能来计算周长:

# app/models.py

from math import pi

class Circle(models.Model):
    radius = models.IntegerField(default=0)

    @property
    def perimeter(self):
        return 2*pi*self.radius

    def __str__(self):
        return str(self.radius)

最后,在我们的视图中,我们可以使
ViewResult
成为detailview,并将圆变量重命名为
final

# app/urls.py

from django.urls import path from myapp.views import HomeView, CircleView, ViewResult

urlpatterns = [ path('home', HomeView.as_view(), name = 'home'), path('insert_radius', CircleView.as_view(), name = 'insert_radius'), path('view_result/<int:pk>', ViewResult.as_view(), name = 'view_result'), ]
#app/views.py
从django.views.generic.detail导入DetailView
从app.models导入循环
类视图结果(详细视图):
模板名称='查看结果.html'
模型=圆

context\u object\u name='final'
remove
return-HttpResponseRedirect(reverse\u lazy(“view\u result”))
,为什么需要它?@RajanSharma:Post/Redirect/Get模式?@RajanSharma如果在insert\u radius.html中输入成功,它会将我重定向到view\u result.html页面remove
return-HttpResponseRedirect(reverse\u lazy(“查看结果”))
,为什么需要它?@RajanSharma:Post/Redirect/Get模式?@RajanSharma如果在insert_radius.html中输入成功,它会将我重定向到view_result.html页面哦,谢谢!它工作起来很有魅力。但是有一个问题,你为什么在models.py中添加@property?样板代码是什么意思?@Retro_编码器:你知道什么吗
@property
有什么作用?我不太懂文档。你能简单地告诉我它有什么作用吗?哦,伙计,谢谢你!它很有魅力。但是有一个问题,你为什么在models.py中添加@property?样板代码是什么意思?@Retro\u coder:你知道
@property
有什么作用吗?我不太懂文档。你能打电话给我吗简单地说,告诉我它是干什么的?