Django模板:forloop.first和forloop.last

55 投票
4 回答
59793 浏览
提问于 2025-04-16 23:12

我在我的模板中有以下代码:

{% for f in friendslist %}

        {% if forloop.first %}
            // display something                            
        {% endif %}

        // display stuff

        {% if forloop.last %}
            // display something
        {% endif %}

{% endfor %}

当朋友列表中有多个项目时,这段代码运行得很好。但是如果只有一个项目,forloop.last条件里面的内容就不会显示。

我猜这是因为在这种情况下,循环是第一个,但我觉得它也是最后一个,对吧?那么为什么第一个和最后一个条件里面的内容都不显示呢?

4 个回答

1

你也可以在模板中使用“not”来解决这个问题。即使列表中只有一个项目,它也能正常工作。

       {% for friend in friendslist %}

                {% if not forloop.last %}
                    // display something                            
                {% endif %}

                {% if forloop.last %}
                    // display something
                {% endif %}
        {% endfor %}
11

你难道不可以用一个“或”标签,比如说 {% if forloop.last or friendlist.count == 1 %} 吗?

            {% for f in friendslist %}

                    {% if forloop.first %}
                        // display something                            
                    {% endif %}

                    // display stuff

                    {% if forloop.last or friendlist.count == 1 %}
                        // display something
                    {% endif %}

            {% endfor %}
43

在我的代码中,如果朋友列表里只有一个元素,它们两个都会执行。这里有一个你可以在命令行中运行的测试,或许你能找出哪里出了问题:

$ ./manage.py shell

>>> from django import template
>>> t = template.Template("""{% for f in friendslist %}
                         {% if forloop.first %}
                             First of the loop                            
                         {% endif %}
                         {{ f }}
                         {% if forloop.last %}
                             Last of the loop
                         {% endif %}
                 {% endfor %}""")

>>> c = template.Context({'friendslist' : ['one element',]})
>>> t.render(c)


                        First of the loop

                    one element

                         Last of the loop

撰写回答