如何在Django模板中获取循环外的queryset值?

时间:2017-02-26 21:53:51

标签: django django-templates

我将以下场景作为示例

当前情况

{% 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>

我怎样才能实现这一目标? 感谢

2 个答案:

答案 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个国家,所以我在设置文件中列出了它们。