gpt4 book ai didi

python - 将计算值传递给 Django 模板

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:23 25 4
gpt4 key购买 nike

我对 Django 还很陌生,并且在将变量传递给 Django 模板时遇到问题。我的代码从数据库中查找整数字段的平均值(使用 Django 的 AVG),然后对结果执行计算。最终我想将计算结果传递给模板。

我的 model.py 是:

from django.db import models

class Post(models.Model):
fname = models.CharField(max_length=20)
lname= models.CharField(max_length=25)
reading=models.IntegerField(default=100)
entrytime=models.DateTimeField(auto_now_add=True)

def __str__(self):
return self

View 是:

from django.views.generic import TemplateView, ListView
from django.db.models import Avg
from .models import Post

class ShowCalcView(ListView):
model=Post
template_name = 'calc.html'

def calca1c(request):

context = Post.objects.aggregate(Avg('reading'))
r=context['reading__avg']
rs = (46.7 + r) / 28.7
context['calc'] = rs
return context

模板是:

<h1>Approximate A1C</h1>

<p>Approximate A1c: {{ calc }}</p>

我尝试过使用 {{ calc }}、{{ calc.rs}}、{{ calc['rs'] }} 以及我能想到的几乎所有其他组合,但该值没有被传递。我已经检查了 shell 中的函数,它产生了所需的结果。我可能遗漏了一些明显的东西,但我无法弄清楚。

感谢您的帮助。

最佳答案

View 的上下文是从get_context_data()生成的。方法。这是您需要重写的内容,以便将额外的上下文注入(inject)到 View 中。目前,您的 getca1c() 方法永远不会被使用,因为它不是 Django 寻找的东西。

所以你会做这样的事情:

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['calc'] = self.getca1c(self)
return context

然后,您可以修改 getca1c() 以仅返回一个数字,即您想要显示的平均值:

def calca1c(self):
result = Post.objects.aggregate(Avg('reading'))
r = result ['reading__avg']
return (46.7 + r) / 28.7

(旁注 - 此方法的第一个参数是 self - 即 View 类实例 - 而不是请求对象)。

然后在您的模板中:

<p>Approximate A1c:  {{ calc }}</p>

关于python - 将计算值传递给 Django 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59691999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com