[英]Passing calculated value to Django template
我對 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
觀點是:
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 中的函數,它產生了想要的結果。 我可能遺漏了一些明顯的東西,但我無法弄清楚。
謝謝您的幫助。
視圖的上下文是從get_context_data()
方法生成的。 這是您需要覆蓋以將附加上下文注入視圖的內容。 因為目前你的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
- 即視圖類實例 - 而不是請求對象)。
然后在您的模板中:
<p>Approximate A1c: {{ calc }}</p>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.