在Django模板中,如何在循环中去掉最后一项的换行符

1 投票
3 回答
1622 浏览
提问于 2025-04-18 03:15

我想用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对象的存在)。

撰写回答