Django模板中的动态html元素

时间:2013-07-03 06:40:22

标签: django django-templates

我是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>

提前致谢

2 个答案:

答案 0 :(得分:0)

使用类别ID作为键构建您的上下文dict,将值设置为list

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

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

答案 1 :(得分: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]

现在,groups_objects dict已准备好由模板处理。我不认为这将是你的整个上下文,所以只需将其作为常规变量传递。然后你只需要使用基本的迭代标签:

{% 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 %}
祝你好运!