我正在使用Django的regroup template tag对一系列对象进行分组.让我们假设这些对象是:

cities = [
    {"name": "Mumbai", "population": "19,000,000", "country": "India"},
    {"name": "Calcutta", "population": "15,000,000", "country": "India"},
    {"name": "New York", "population": "20,000,000", "country": "USA"},
    {"name": "Chicago", "population": "7,000,000", "country": "USA"},
    {"name": "Tokyo", "population": "33,000,000", "country": "Japan"},
]

在我的模板中,我将它们按如下方式分组:

{% regroup cities by country as country_list %}

<ul>
{% for country in country_list %}
    <li>{{ country.grouper }}
    <ul>
        {% for city in country.list %}
          <li>{{ city.name }}: {{ city.population }}</li>
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>

这导致了

India
    Mumbai: 19,000,000
    Calcutta: 15,000,000
USA
    New York: 20,000,000
    Chicago: 7,000,000
Japan
    Tokyo: 33,000,000

我想 for each 对象显示一个"总体"索引,这样它看起来就像这样:

India
    1: Mumbai: 19,000,000
    2: Calcutta: 15,000,000
USA
    3: New York: 20,000,000
    4: Chicago: 7,000,000
Japan
    5: Tokyo: 33,000,000

我不是在要求一个HTML解决方案;我的用例是一系列分组的问题,我想添加一个问题计数器.

有没有办法在模板中做到这一点,或者我应该在我的视图中编写必要的代码?

推荐答案

我认为你需要在你的视图中添加索引,Django故意限制了它的模板语言中的功能,以阻止直接在模板中包含广泛的逻辑.我建议通过以下建议的方法来解决这个问题:

# views.py
from django.shortcuts import render

def your_view(request):
    cities = [
        {"name": "Mumbai", "population": "19,000,000", "country": "India"},
        {"name": "Calcutta", "population": "15,000,000", "country": "India"},
        {"name": "New York", "population": "20,000,000", "country": "USA"},
        {"name": "Chicago", "population": "7,000,000", "country": "USA"},
        {"name": "Tokyo", "population": "33,000,000", "country": "Japan"},
    ]

    # Add an index to each city
    for index, city in enumerate(cities, start=1):
        city['index'] = index

    return render(request, 'your_template.html', {'cities': cities})

然后,在模板中,您可以使用index属性:

{% regroup cities by country as country_list %}

<ul>
    {% for country in country_list %}
        <li>{{ country.grouper }}
        <ul>
            {% for city in country.list %}
                {% with counter=counter|add:1 %}
                 <li>{{ city.index }}: {{ city.name }}: {{ city.population }}</li>
                {% endwith %}
            {% endfor %}
        </ul>
        </li>
    {% endfor %}
</ul>

Django相关问答推荐

Django Signals:从实例访问ManyToManyRel值

Django中的登录重定向

在Django ORM中引用非主外键

如何在Django REST框架中实现ForeignKey搜索

源自访问外键关系的模型方法 get_absolute_url 的 django 重复 SQL 查询

UpdateView 不会对 from 属性进行数据绑定

如何将多个模型添加到单个列表视图?

从一个组中获取所有用户 - Django

如何在 Django REST Framework API 响应中使用多标签过滤器?

Django 模型 Select - 只允许管理界面上的特定转换

如何根据查询集中的条件返回多个聚合?

Django基于类的视图上的success_url的反向抱怨循环导入

如何从 django 模板生成静态 html 文件?

TestCase 类中的 setUpClass、setUpTestData 和 setUp 有什么区别?

获取 Django 中的缓存键列表

django 复数模板

如何使 Django QuerySet 批量删除()更高效

AssertionError: `HyperlinkedIdentityField` 需要序列化程序上下文中的请求

如何将 django csrf 令牌直接嵌入 HTML?

PyCharm 代码判断提示找不到模板文件,如何解决?