如何在Django模板中统计字典redict对应不同serial number的值的长度
Django模板获取过滤器返回结果的长度解决方案
你之前的写法不生效是因为Django模板中过滤器的运算优先级高于点属性调用,redict|get_val:comments.sno.count会被解析为将comments.sno.count作为参数传入get_val过滤器,而非先获取get_val的返回值再统计长度。
方案1:链式调用length过滤器(通用方案,推荐)
Django模板支持过滤器链式调用,执行顺序从左到右,直接在get_val过滤器后拼接内置的length过滤器即可统计可迭代对象的长度:
{{ redict|get_val:comments.sno|length }}
如果需要处理serial number不存在返回空的异常场景,可以加兜底过滤器避免报错:
{{ redict|get_val:comments.sno|default_if_none:""|length }}
方案2:用with标签存为临时变量后调用count方法
如果get_val返回的是Django QuerySet对象,你需要调用QuerySet原生的count方法做数据库层面的计数,可以先用with标签把过滤器返回值存为临时变量再调用:
{% with target_list=redict|get_val:comments.sno %} {{ target_list.count }} {% endwith %}
内容的提问来源于stack exchange,提问作者Labhroop singh
相关产品推荐
相关产品推荐

