如何在不使用模型的情况下在Django模板中显示python变量值?
我是Django的新手,目前正面临这个问题。我想计算一个圆的面积和周长,并将结果发布到Django模板中。我使用了一个表单,允许用户输入任何被视为半径的数字。使用POST方法,它将对其进行处理并输出面积和周长(在views.py文件中)。但是,我无法在Django模板HTML页面中显示面积和周长值。我在模型中存储的唯一值是用户输入的半径值。如何在不使用模型的情况下显示面积和周长 表单半径输入的HTML页面:insert_radius.HTML如何在不使用模型的情况下在Django模板中显示python变量值?,python,django,Python,Django,我是Django的新手,目前正面临这个问题。我想计算一个圆的面积和周长,并将结果发布到Django模板中。我使用了一个表单,允许用户输入任何被视为半径的数字。使用POST方法,它将对其进行处理并输出面积和周长(在views.py文件中)。但是,我无法在Django模板HTML页面中显示面积和周长值。我在模型中存储的唯一值是用户输入的半径值。如何在不使用模型的情况下显示面积和周长 表单半径输入的HTML页面:insert_radius.HTML 用于显示输出的HTML页面:view_result.
用于显示输出的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'
removereturn-HttpResponseRedirect(reverse\u lazy(“view\u result”))
,为什么需要它?@RajanSharma:Post/Redirect/Get模式?@RajanSharma如果在insert\u radius.html中输入成功,它会将我重定向到view\u result.html页面removereturn-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
有什么作用吗?我不太懂文档。你能打电话给我吗简单地说,告诉我它是干什么的?