48 votes

Modèles Django : forloop.first et forloop.last

J'ai le code suivant dans mon modèle :

 {% for f in friendslist %}

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

        // display stuff

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

{% endfor %}

Cela fonctionne comme prévu lorsqu'il y a plus d'un élément dans la liste d'amis. Mais s'il n'y a qu'un seul élément, alors le contenu à l'intérieur du forloop.last le conditionnel ne s'affiche pas.

Je suppose que c'est parce que la boucle dans ce cas est la première, mais je veux dire que c'est aussi la dernière, n'est-ce pas ? Alors pourquoi ne pas contenir à la fois le contenu en premier et en dernier spectacle conditionnel ?

38voto

newmaniese Points 188

Dans mon code, ils s'exécutent tous les deux s'il n'y a qu'un seul élément dans la liste d'amis. Voici un test que vous pouvez exécuter dans le shell où vous pouvez peut-être comprendre ce qui ne fonctionne pas :

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

9voto

Christopher Points 36

ne pourriez-vous pas simplement utiliser une balise "ou" comme {% if forloop.last ou 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 %}

1voto

Alkindus Points 626

Vous pouvez également utiliser ''not'' dans le modèle pour résoudre ce problème. Cela fonctionne même s'il n'y a qu'un élément dans la liste.

        {% for friend in friendslist %}

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X