0

我是 Python Django 的新手。

我有一个django集合对象,按category_id降序排列如下,

category_id         name
1               apple
1               orange
2               car
2               bus
2               truck
3               ifosys
3               wipro

如何安排<ul></ul>元素内的每个类别项目。

预期结果,

<h4>From catgeory 1</h4>
<ul>
    <li>apple</li>
    <li>orange</li>
</ul>
<h4>From catgeory 2</h4>
<ul>
    <li>car</li>
    <li>bus</li>
    <li>truck</li>
</ul>
<h4>From catgeory 3</h4>
<ul>
    <li>ifosys</li>
    <li>wipro</li>
</ul>

提前致谢

4

2 回答 2

0

如果我正确理解了这个问题,那么 Django 对象的集合是指一个 QuerySet。然后,正如已经提到的,您需要按 category_id 对对象进行分组。最直接的方法是遍历 Queryset 并在 views.py 中创建一个字典:

grouped_objects = {}
for obj in obj_collection:
    if obj.category_id in grouped_objects.keys():
        grouped_objects[obj.category_id].append(obj)
    else:
        grouped_objects[obj.category_id] = [obj]

现在 grouped_objects 字典已准备好由模板处理。我认为这不会是您的全部上下文,因此只需将其作为常规变量传递即可。那么你只需要使用基本的迭代标签:

{% for category, object_list in grouped_objects.items %}
    <h4>From category {{category}}</h4>
    <ul>
    {% for obj in object_list %}
        <li>{{ obj.name }}</li>
    {% endfor %}
    </ul>
{% endfor %}

祝你好运!

于 2013-07-03T07:56:22.997 回答
0

使用类别 ID 作为键和值作为 构建上下文字典list

{
    '1': ["apple", "orange"],
    '2'" ["car", "bus"],
    ...
    ...
    '8': ["Foo", "Bar"],
}

然后在模板处迭代它。模板只是通过一些简单的迭代和过滤器来渲染数据。您不应该给模板增加对象构建或解析的负担。

于 2013-07-03T07:02:06.913 回答