2011-08-09 16 views
33

Mam następujący kod w moim szablonu:Django szablony: forloop.first i forloop.last

{% for f in friendslist %} 

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

     // display stuff 

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

{% endfor %} 

To działa zgodnie z oczekiwaniami, gdy istnieje więcej niż jedna pozycja w friendslist. Ale jeśli jest tylko 1 element, wówczas zawartość w warunku nie jest wyświetlana.

Myślę, że to dlatego, że pętla w tym przypadku jest pierwsza, ale mam na myśli, że jest to również ostatnia prawda? Dlaczego więc nie umieszczać obu treści w pierwszym i ostatnim serialu warunkowym?

+1

Próbowałem tego kodu na obiektach listy z tylko jednym elementem, a zawartość dla obu sekcji jest wyświetlana zgodnie z oczekiwaniami. – Brandon

+1

To może nadal zależeć od wersji django Myślę, że powinieneś wspomnieć o wersji django, której używasz. – dusual

Odpowiedz

27

W moim kodzie oba są wykonywane, jeśli w liście znajomych znajduje się tylko jeden element. Oto test można uruchomić w powłoce może gdzie można dowiedzieć się, co nie działa:

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

nie można po prostu użyć „lub” jak tag {% jeśli forloop.last lub 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 %} 
Powiązane problemy