2011-08-09 12 views
33

tengo el siguiente código en mi plantilla:las plantillas de Django: forloop.first y forloop.last

{% for f in friendslist %} 

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

     // display stuff 

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

{% endfor %} 

Funciona como se esperaba cuando hay más de un artículo en el friendslist. Pero si solo hay 1 artículo, entonces el contenido dentro del forloop.last condicional no se muestra.

Supongo que esto se debe a que el bucle en ese caso es el primero, pero quiero decir que también es el último ¿verdad? Entonces, ¿por qué no se muestran ambos contenidos dentro de la primera y la última demostración condicional de ?

+1

Probé este código en una lista de objetos con un solo elemento, y el contenido de ambas secciones se muestra como se esperaba. – Brandon

+1

Esto aún podría depender de las versiones de django. Creo que debería mencionar la versión de django que está utilizando. – dusual

Respuesta

27

En mi código ambos se ejecutan si solo hay un elemento en la lista de amigos. Aquí está una prueba se puede ejecutar en el shell en el que tal vez se puede averiguar lo que no funciona:

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

no podía que acaba de utilizar una etiqueta "o" como {% si forloop.last o de amigos. recuento == 1%}

  {% for f in friendslist %} 

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

        // display stuff 

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

      {% endfor %} 
Cuestiones relacionadas