簡體   English   中英

將計算值傳遞給 Django 模板

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM