You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HTML中仅显示Django视图返回的字典值?

解决Django模板中仅显示aggregate聚合数值的问题

问题核心

你用aggregate(Sum('value'))得到的是字典对象(比如{'value__sum': 1831}),直接在模板中渲染会显示整个字典而非单独数值。另外你的计数变量q_total、q_open、q_paied也有问题——你写的是.count(仅引用方法),而非.count()(调用方法),这会导致模板显示方法对象而非实际计数。

方案一:在视图层直接提取数值

修改视图中聚合和计数的代码,直接取出字典里的数值,同时修正count的调用:

def list_pay(request):
    item = Pay.objects.all()

    # 修正count为count()调用,获取实际计数
    q_total = Pay.objects.all().count()
    q_open = Pay.objects.filter(status=0).count()
    q_paied = Pay.objects.filter(status=1).count()

    # 直接提取聚合后的数值,加or 0避免无数据时返回None
    v_total = Pay.objects.aggregate(Sum('value'))['value__sum'] or 0
    v_open = Pay.objects.filter(status=0).aggregate(Sum('value'))['value__sum'] or 0
    v_paied = Pay.objects.filter(status=1).aggregate(Sum('value'))['value__sum'] or 0

    data = {
        'item':item,
        'v_total':v_total,
        'v_open':v_open,
        'v_paied':v_paied,
        'q_total':q_total,
        'q_open':q_open,
        'q_paied':q_paied
    }
        
    return render(request, 'pay/list_pay.html', data)

方案二:在模板层直接访问字典键

如果不想修改视图,直接在模板中通过字典键获取数值(仍建议在视图层修正count的调用):

<div class="row d-flex justify-content-center">
    <h3 class="mb-3 mt-3">Lista <span class="text-success">de pagamentos</span></h3>

    <div class="col m-3 p-3">
        <label>Total de boletos</label>
        <h1 class="text-primary"> {{ q_total }}</h1>
        <h1 class="text-primary"> {{ v_total.value__sum }}</h1>
    </div>
    <div class="col m-3 p-3">
        <span>Quantidade de boletos</span>
        <h1 class="text-success">{{ q_paied }}</h1>
        <h1 class="text-success">{{ v_paied.value__sum }}</h1>
    </div>
    <div class="col m-3 p-3">
        <span>Quantidade de boletos</span>
        <h1 class="text-danger">{{ q_open }}</h1>
        <h1 class="text-danger">{{ v_open.value__sum }}</h1>
    </div>
</div>

额外优化提示

如果想让聚合字段名更清晰,可以在aggregate时指定别名:

v_total = Pay.objects.aggregate(total_amount=Sum('value'))['total_amount'] or 0

这样无论是视图层处理还是模板层访问,都能使用更直观的名称(比如模板中用{{ v_total }}或{{ v_total.total_amount }})。

内容的提问来源于stack exchange,提问作者Ricardo Ferrari Pasqualino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:39:49