2011-08-09 59 views
33

我有我的模板下面的代碼:Django模板:forloop.first和forloop.last

{% for f in friendslist %} 

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

     // display stuff 

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

{% endfor %} 

它將按預期工作時,有在friendslist多個項目。但是,如果只有1個項目,則不會顯示forloop.last 條件中的內容。

我想這是因爲這種情況下的循環是第一個,但我的意思是它也是最後一個權利?那麼爲什麼dosn't內容首先和最後 有條件顯示?

+1

我試過這個代碼只有一個項目的列表對象,並且兩個部分的內容按預期方式顯示。 – Brandon

+1

這可能仍然取決於Django的版本,我認爲你應該提到你正在使用的Django的版本。 – dusual

回答

27

在我的代碼中,如果在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 
4

不能你只需要使用一個「或」標籤如{%如果forloop.last或好友列表。計數== 1%}

  {% for f in friendslist %} 

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

        // display stuff 

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

      {% endfor %}