在HTML模板中使用模板标签求和

2 投票
2 回答
8939 浏览
提问于 2025-04-16 13:31

我在HTML中想要进行求和,但是模板标签返回的是0。

这是我的View.py文件:

def gen_Report(request):

### query returns below output 
list=[{'total': 1744, 'user': u'x'}, {'total': 13, 'user': u'y'}, {'total': 126, 'user': u'z'}, {'total': 46, 'user': u'm'}, {'total': 4, 'user': u'n'}, {'total': 8, 'user': u'o'},  {'total': 3, 'user': u'p'}]

return render_to_response('user.html', locals(),
                            context_instance = RequestContext(request))

这是我的模板:

user.html

  {% load temptags %}

 <table id="myTable" class="tablesorter">
    <thead>
    <tr>

    <th>S.No</th>
    <th>role</th>
    <th>Count</th>

    </tr>
    </thead>
    {% for fetch in list %}

    <tr>
    <td>{{forloop.counter}}</td>
    <td>{{fetch.user}}</td>
    <td>{{fetch.total}}</td>



    {% endfor %}
    <td>{{ list.total|running_total}}</td>
    <tr>

    </table>

这是我的模板标签:

from django.template import Library
register = Library()
@register.filter
def running_total(list_total):
  return sum(d.get('list_sum') for d in list_total)

这是输出结果:

S.No    user          Count
1     x       1744
2     y         13
3     z         126
4     m         46
5     n              4
6     o          8
Sum------------------>   0  (it returns zero)

我在这里做错了什么吗?

能不能帮我一下,怎么才能用模板标签返回总和呢?

2 个回答

2

我猜你的列表可能是一个迭代器。也就是说,第一次遍历的时候,它会有内容,但第二次遍历的时候就什么都没有了。

所以你应该在调用你的模板之前,做一些类似下面的操作:

for d in list_total:
   d.set('list_sum', list(d.get('list_sum')))
7

你的模板标签看起来有点问题。你把 role_total 作为参数,但接着又在循环一个叫 list_total 的东西(看起来没有定义),然后从这个列表中的每个字典里尝试获取一个叫 list_sum 的键,这个键似乎也没有定义。

from django.template import Library
register = Library()
@register.filter
def running_total(your_dict_list):
   return sum(d['total'] for d in your_dict_list)

然后你在模板中这样调用它: <td>{{ list|running_total}}</td>

撰写回答