如何在Django模板中为循环分组(打印标题)有序项?

时间:2012-12-26 22:01:50

标签: python django django-templates

我有一个看起来像这样的Django模型:

class City(models.Model):
    country = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    population = models.IntegerField()

我想在模板中执行的操作是打印按国家/地区分组的城市列表,如下所示:

Canada
  Calgary
  Montreal
  Toronto
Mexico
  Juarez
United States
  Atlanta
  Chicago
  Denver

我可以通过国家名称轻松订购,但我想在第一次在for循环中看到时将模型的国家/地区名称打印为标题。有没有理智的方法在Django中做到这一点?

我是否可以在视图或查询中为模板提供“第一次出现”的布尔值,或者在模板中执行此操作的聪明方法?

1 个答案:

答案 0 :(得分:5)

请参阅regroup,您可以执行以下操作:

{% regroup city_list|dictsort:"country" by country as country_list %}

<ul>
{% for country in country_list %}
    <li><strong>{{ country.grouper }}</strong>
        <ul>
            {% for item in country.list %}
                <li>{{ item.city }}</li>
            {% endfor %}
        </ul>
    </li>
{% endfor %}
</ul>