【问题标题】:Django aggregation. How to render its value into the template?Django 聚合。如何将其值渲染到模板中?
【发布时间】:2020-06-13 12:31:39
【问题描述】:

我遇到了一个我真的无法理解的最奇怪的问题。好吧,我关注了This,但没有任何帮助。 正如问题所说,我只想将结果呈现到模板中。下面是我的代码。

Views.py

...
    invoice = lead.invoice_set.all()
    total_invoice = invoice.aggregate(total=Sum('amount'))

    context = { 'total_invoice' : total_invoice }

html

{{total_invoice.total}}

这是我的代码,根据文档必须工作,并且正如我共享的链接上所建议的那样。不幸的是,它不起作用,我不知道是什么原因。 以下是我迄今为止尝试过的。

试一试

当我尝试将其打印到终端时,它会给我带来一本字典。例如。

print(total_invoice)

prints on terminal...
{'total': 70000}

这很好理解。现在我想提取价值,这可以通过简单的 {{total_invoice.total}} 来完成。但它在模板上什么也没显示。

尝试 2(工作)

由于我尝试了不同的方法将值呈现到模板中,因此我遇到了这个奇怪的解决方案。我不知道这是如何工作的。 我在这里所做的与 TRY 1 不同的只是将变量名称(total_invoice)更改为(total),它工作得非常好。方法如下。

Views.py

    invoice = lead.invoice_set.all()
    total = invoice.aggregate(total=Sum('amount'))

    context = { 'total' : total }

html

{{total.total}}

只需将变量名称更改为总计,它就可以完美地工作。但是后来我认为名称应该相同,但事实并非如此,所以我尝试为两个变量赋予相同的名称,但这一次不是“总”,但它再次不起作用。例如

...
total_invoice = invoice.aggregate(total_invoice =Sum('amount'))

我不知道到底发生了什么。

谁能帮我解决这个问题。 谢谢

【问题讨论】:

    标签: python django django-templates django-aggregation


    【解决方案1】:

    如果你聚合,你会得到一个字典。确实,你看:

    {'total': 70000}
    

    您可以通过在 Django 模板中使用 {{ <i>variable_name</i>.<i>key</i> }} 来访问与键对应的值。

    所以如果你通过它:

        …
        total_invoice = invoice.aggregate(total_invoice=Sum('amount'))
        …
        render(request, 'some_template.html', {'total_invoice': total_invoice })

    然后在模板中,你渲染它:

    {{ <i>total_invoice</i>.<b>total_invoice</b> }}

    点之前的部分是指变量名:字典中的名称(斜体),第二个是字典中的键(粗体)。

    如果你因此通过一个名为 total 的变量传递它:

        …
        total_invoice = invoice.aggregate(total_invoice=Sum('amount'))
        …
        render(request, 'some_template.html', {'total': total_invoice })

    你渲染它:

    {{ <i>total</i>.<b>total_invoice</b> }}

    然而,在视图中解包字典可能更有意义,因此将总数作为一个变量传递:

        …
        total_invoice = invoice.aggregate(total=Sum('amount'))['total']
        …
        render(request, 'some_template.html', {'total_invoice': total_invoice })

    然后渲染它:

    {{ <i>total_invoice</i> }}

    【讨论】:

    • 感谢您的回答。如前所述,我已经尝试了您所说的所有内容,但它再次在模板上打印任何内容。但是,当我尝试按照您的建议在视图中解压缩字典时,它会显示我的发票计数而不是 7000 的值。当我在终端上渲染 {{ total_invoice }} 时,它确实会打印出我的值7000。但是我在模板上打印的同一个变量给我带来了计数。
    猜你喜欢
    • 2022-01-01
    • 2019-02-23
    • 2019-07-12
    • 2017-10-13
    • 2022-07-22
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多