2010-10-01 38 views
2

模板:Django:重構模板視圖以包括計數?

<ul id="bugs-list"> 
    {% for group in groups %} 

     <h2>{{ group.name }}</h2> <span></span> 
     {% for data in group.grab_bugs %} 
      <li><a href="{{data.get_absolute_url}}">{{data.name }}</a></li> 
     {% endfor %} 

    {% endfor %} 

    </ul> 

models.py:

class BrowserGroups(models.Model): 
    name = models.CharField(max_length=100) 
    slug = models.SlugField(unique=True) 
    browsers = models.ManyToManyField('Browser') 

    def grab_bugs(self): 
     bugs = Bug.objects.filter(browser__browsergroups=self,really_bug=True).distinct() 
     return bugs 

    def __unicode__(self): 
     return self.name 

    class Meta: 
     verbose_name_plural = 'Browser Groups' 

我試圖渲染的bug(data)附近的<h2>數量。在h2附近包括data的計數的有效方式是什麼?我應該在模型類中定義一個單獨的函數來返回錯誤總數?還是有更高效的方法?

回答

2
{% with group.grab_bugs as distinct_bugs %} 
    <h2>{{ group.name }}</h2> (Count: {{ distinct_bugs.count }}) 
    {% for data in distinct_bugs %} 
     <li><a href="{{data.get_absolute_url}}">{{data.name }}</a></li> 
    {% endfor %} 
{% endwith %} 

說明:Group類的grab_bugs方法返回Bug實例的querset。要計算錯誤,請在查詢集上調用count()方法。

這會花費你兩個查詢(不包括循環內的那些查詢)。一個獲取計數,然後再獲取一個錯誤列表。

+0

這句法正確嗎?我可以發誓你不能在那裏有調用括號,'()'。 '.count'工程。 – 2010-10-01 09:27:30

+0

@meder:GRRRR。錯字:P改變它:) – 2010-10-01 09:28:29

+0

另一件事 - 因爲我現在調用兩次'grab_bugs'函數,效率不高嗎? – 2010-10-01 09:28:34