Django:重构模板视图以包含计数?

时间:2010-10-01 09:22:44

标签: django

TEMPLATE:

 <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'

我正在尝试在data附近渲染错误数量<h2>。什么是在h2附近包括data计数的有效方法?我应该在我的模型类中定义一个单独的函数来返回错误的总数吗?还是有更有效的方式?

1 个答案:

答案 0 :(得分: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 %}

说明:grab_bugs类的Group方法返回Bug个实例的querset。要计算错误,请在查询集上调用count()方法。

这将花费您两次查询(不包括循环内的查询)。一个得到计数,然后下一个检索错误列表。