假设我有一个国家/地区列表,我希望按大洲显示这些国家/地区。 我的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函数?
答案 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