我将以下场景作为示例
当前情况
{% for city in cities %}
<div id="{{city.country}}">
<p>Choose a city</p>
<li>{{ city.name }}</li>
</div>
{% endfor %}
我想要什么
<div id="{{city.country}}">
<p>Choose a city</p>
{% for city in cities %}
<li>{{ city.name }}</li>
{% endfor %}
</div>
我怎样才能实现这一目标? 感谢
答案 0 :(得分:1)
使用内置的{% regroup %}模板标签可能更优雅。
这将是这些方面(未经测试):
{% regroup cities by country as country_list %}
{% for country in country_list %}
<div id="{{country.grouper}}">
<p>Choose a city</p>
{% for city in country.list %}
<li>{{ city.name }}</li>
{% endfor %}
</div>
{% endfor %}
有趣的是,官方Django文档中的示例也使用了城市和国家。看看(上面链接)。
答案 1 :(得分:0)
就像@erework说的那样,我在我看来重构了数据。如果您有更好的方法,请随时编辑。以下是我的表现:
#views.py
from django.conf import settings
cities = []
for country in settings.COUNTRIES:
cities.append([country, City.objects.filter(country=country)])
#cities.html
{% for country, city in cities %}
<div id="{{country}}">
<p>Choose a city</p>
<li>{{ city.name }}</li>
</div>
{% endfor %}
我希望我的城市列表按国家/地区排序,因此我将数据放入列表中。此外,我只有不到10个国家,所以我在设置文件中列出了它们。