在HTML模板中使用模板标签求和
我在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>