Django模板中遍历模型条目时如何排除最后一条且无需视图预处理
Django模板遍历排除最后一条记录的实现方法
不需要修改view层代码,有两种常用的模板层实现方案:
方案1:使用内置slice过滤器(推荐)
Django模板的slice过滤器支持Python式的负索引语法,直接截取列表排除最后一个元素即可,代码修改量极小:
{% for chat_stream in chat|slice:":-1" %} <p> <b>bot:</b> <br> {{chat_stream.bot}} <br> <b>{{user}}:</b> <br> {{chat_stream.user}} <br> </p> {% endfor %}
- 说明:
: -1的切片规则和Python原生完全一致,代表取从第一个元素到倒数第一个元素之前的所有内容,自动跳过最后一条。如果原列表长度为0或1,切片后会返回空列表,循环不会执行,符合预期无报错。
方案2:使用forloop.last判断跳过
如果需要完整遍历整个列表(比如要同时统计总数等场景),可以在循环内部通过Django内置的forloop.last变量判断是否为最后一条,仅渲染非最后一条的内容:
{% for chat_stream in chat %} {% if not forloop.last %} <p> <b>bot:</b> <br> {{chat_stream.bot}} <br> <b>{{user}}:</b> <br> {{chat_stream.user}} <br> </p> {% endif %} {% endfor %}
- 说明:
forloop.last是Django for循环内置的布尔变量,当遍历到最后一个元素时会返回True,加反选判断即可跳过最后一条的渲染。
内容的提问来源于stack exchange,提问作者Katie Melosto
相关产品推荐
相关产品推荐

