使用django模板,如何删除循环中的最后一项换行符

时间:2014-04-18 11:39:38

标签: python django templates

我想使用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 :(得分:2)

您可以使用{% if forloop.last %}检查您是否在最后一次迭代中。请参阅the docs for for

答案 1 :(得分:2)

在for循环中,存在名为forloop的额外对象。这包含有关循环的一些信息。请参阅this documentation page

在您的情况下,代码将是这样的:

=================================
{% for h in hosts %} - {{ h }}{% if not forloop.last %}
{% endif %}{%endfor %}
=================================

问题是,上述清洁剂是您当前的解决方案吗?我个人认为上面解决方案中的额外代码会让事情变得混乱,但这只是个人偏好。但是,它是一个有效的替代方案(作为奖励,现在你知道了forloop对象)。

答案 2 :(得分:0)

=================================
{% for h in hosts %} - {{ h }}
{% endfor %}=================================

答案是否存在,但有更好的东西吗?