Django模板:for循环第一个和for循环最后一个

cgyqldqp  于 2023-03-20  发布在  Go
关注(0)|答案(4)|浏览(262)

我的模板中有以下代码:

{% for f in friendslist %}

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

        // display stuff

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

{% endfor %}

当friendslist中有多个条目时,它可以正常工作,但如果只有一个条目,则forloop.last条件语句中的内容不会显示。
我想这是因为循环在第一个,但我的意思是它也是最后一个,对吗?,那么为什么第一个和最后一个条件中的内容不都显示出来?

j13ufse2

j13ufse21#

在我的代码中,如果friendslist中只有一个元素,那么它们都会执行。下面是一个可以在shell中运行的测试,也许你可以找出哪些元素不起作用:

$ ./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
rmbxnbpk

rmbxnbpk2#

你不能只使用一个“或”标记像{% if forloop.last或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 %}
sqxo8psd

sqxo8psd3#

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

{% for friend in friendslist %}

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

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

uplii1fm4#

举例说明了当您需要访问包含JSON数组的嵌套JSON时,可以接受的答案,并且只获取第一个元素。
在下面的例子中,关于用户的地址,我只想显示用户配置文件中注册的第一部电话的电话号码。
将传递给HTML模板的示例users json

{
    "name": "user1",
    "birthdate": "date1",
    "phones": [
        {
            "number": "111111111",
            "type": "type1"
        },
        {
            "number": "222222222",
            "type": "type2"
        }
    ],
}

HTML文件,使用Jinja在表中呈现此示例:

<table id="users_table" class="table table-hover table-sm">
    <thead>
      <tr>
        <th scope="col">#</th>
        <th scope="col">Username</th>
        <th scope="col">Birthdate</th>
        <th scope="col">Phone</th>
      </tr>
    </thead>
    <tbody>
      {% for user in users %}
      <tr>
        <th scope="row">{{ forloop.counter }}</th>
        <td>{{ user.name }}</td>
        <td>{{ user.birthdate }}</td>
        {% for phone in user.phones %}
          {% if forloop.first %}
            <td> {{ phone.number }}</td>                      
          {% endif %}
        {% endfor %}
      </tr>
    </tbody>
</table>

相关问题