在Django模板中,如何在循环中去掉最后一项的换行符
我想用Django的模板引擎来生成一些文本文件:
我写了这个脚本:
from django.template import Template, Context
from django.conf import settings
settings.configure()
with open('etchosts') as fh:
t = Template(fh.read().strip())
c = Context({'hosts': ['host A','host B', 'host C']})
print t.render(c)
还有模板文件“etchosts”:
=================================
{% for h in hosts %} - {{ h }}
{% endfor %}
=================================
当我运行这个脚本时,我得到了:
=================================
- host A
- host B
- host C
<----- unwanted newline
=================================
你可以看到,在循环的最后出现了一个多余的换行符。
我该如何修改我的模板,才能得到:
=================================
- host A
- host B
- host C
=================================
?
3 个回答
0
=================================
{% for h in hosts %} - {{ h }}
{% endfor %}=================================
这是答案,但有没有更好的选择呢?
2
你可以用 {% if forloop.last %}
来检查你是否在最后一次循环中。想了解更多,可以查看 这个文档,里面有关于 for
的详细说明。
3
在一个for循环中,会有一个额外的对象叫做 forloop
。这个对象里面包含了一些关于循环的信息。你可以查看这份文档来了解更多。
在你的例子中,代码可能是这样的:
=================================
{% for h in hosts %} - {{ h }}{% if not forloop.last %}
{% endif %}{%endfor %}
=================================
问题是,上面的写法比你现在的解决方案更简洁吗?我个人觉得上面的解决方案多出来的代码反而让事情变得复杂,但这只是我的个人看法。不过,这确实是一个有效的替代方案(而且作为额外的收获,你现在知道了forloop对象的存在)。