django中的组列表视图

时间:2015-12-11 17:18:29

标签: django django-templates django-views

假设我有一个国家/地区列表,我希望按大洲显示这些国家/地区。 我的models.py看起来像这样

class Countries(models.Model):
    name = models.CharField(max_length=200)
    continent = models.CharField(max_length=200)

而且,我的views.py看起来像这样:

class ListCountriesView(ListView):
    model = Countries
    template_name = 'country_list.html'

我的html显示以下列表

 Asia
 Japan
 Asia
 S.Korean
 Asia
 China
 Asia
 India
 Europe
 Germany
 Europe
 France
 Europe
 Belgium
 Africa
 Ghana

我的country_list.html如下所示:

<html>
<table>
<tr><th>Country</th></tr>
{% for country in object_list%}
     <td>kpi.continent</td>
     <tr><td>country.name</td></tr>
</table>
</html>

我希望一次显示该大陆的名称,然后是相应的cooutries。我无法弄清楚如何按大陆对列表进行分组。是否有任何可以在django模板中使用的fllter函数?

2 个答案:

答案 0 :(得分:1)

是的。当然有:

{% regroup object_list by continent as continents_list %}

<ul>
{% for continent in continents_list %}
    <li>{{ continent.grouper }}
    <ul>
        {% for item in continent.list %}
          <li>{{ item.name }}</li>
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>

更多文档:https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#regroup

答案 1 :(得分:0)

它帮助解决了我作为Django新手的问题。顺便说一句,我正在使用Django标准列表视图按事件显示事件获胜者。重新分组帮助我按上述方式分组,但是我随机登上领奖台的订单。通过按照代码片段对列表视图进行排序可以解决此问题。

class WinnerListView(ListView):
    model = Winner
    template_name = "scores/winners.html"
    context_object_name = "winners"
    ordering = ["score_id__sevent", "-prize"]
    paginate_by = 16