Django模板条件判断报错:无法访问子模型统计数量
Django模板子对象数量条件判断报错解决
问题根源
你遇到的Unexpected end of expression in if tag错误,是因为模板中的{% elif %}标签没有附带任何判断条件——Django模板的elif必须指定具体的表达式,不能单独使用。
另外还有个性能优化点:你用的code.test_set.all.count会先把所有关联的Test对象加载到内存再计数,换成code.test_set.count更高效,它会直接在数据库层面执行COUNT查询,避免不必要的内存开销。
修正后的模板代码
下面是两种可行的修正方案,选其一即可:
方案1:修复条件判断逻辑
保留你原本的分支逻辑,把空的elif换成else(因为只有两种情况:数量为0和数量大于0):
{% if productcodes %} {% for code in productcodes %} <tr> <th scope="row"><a href="show_productcode/{{ code.id }}"> {{ code }} </a></th> {% if code.test_set.count < 1 %} <td>0</td> {% else %} <td>{{ code.test_set.count }}</td> {% endif %} <td>Future Dev WO</td> </tr> {% endfor %} {% endif %}
方案2:简化写法
其实不需要条件判断,因为当关联的Test对象数量为0时,code.test_set.count本身就会返回0,直接渲染即可:
{% if productcodes %} {% for code in productcodes %} <tr> <th scope="row"><a href="show_productcode/{{ code.id }}"> {{ code }} </a></th> <td>{{ code.test_set.count }}</td> <td>Future Dev WO</td> </tr> {% endfor %} {% endif %}
验证说明
你在shell中测试code.test_set.all.count <1正常,是因为Python允许这样的表达式,但Django模板的标签语法有严格要求,elif不能空着。替换后即可正常显示每个Productcode对应的Test子对象数量。
内容的提问来源于stack exchange,提问作者user25252853
相关产品推荐
相关产品推荐

