2011-12-28 78 views
1

我不知道标题是否不清楚,但我会在这里尝试解释它。首先一些前言 - 我试图做的是显示丢失具有相同属性的对象,并且我想根据另一个属性对它们进行分组。Django模板 - 根据某个值在其他位置设置元素的值

  1. 首先我得到第一个属性的所有不同的值。
  2. 第二我得到第二个属性的所有不同值。
  3. 最后我得到的所有对象的列表
  4. 然后我遍历列值,并显示列表中的所有具有两个属性

然而,有可能有些对象相同的值对象其中有第一个属性,而不是第二个,所以我不想显示该属性的名称。也许这个模板片段会使它更清晰。它仅包含inner two loops

{% for attr2 in attr2_list %} 
    <li class='category'> {{ attr1.attr1 }} 
     <ul> 
      {% set counter = 0 %} 
      {% for object in object_list %} 
       {% if object.attr1 == attr1.attr1 and object.attr2 = attr2.attr2 %} 
        {% increment counter %} 
        <li><a href="{{ object.get_absolute_url }}"> Test {{counter}} </a></li> 
       {% endif %} 
      {% endfor %} 
     </ul> 
    </li> 
{% endfor %} 

我想的是,如果for循环并不满足特定attr2那么我不想显示该<li class='category'> {{ attr1.attr1 }}

我希望我已经说清楚了。感谢您的帮助提前

回答

1

这种逻辑更正确地放在视图而不是模板。您可以在视图中很容易地过滤这些对象,然后仅将满足条件的对象作为上下文中的命名值传递。我会给你一些代码,但我不知道你正在使用哪些数据。

2

你正在试图在你的模板中做这个失败的战斗:在这里最接近你的解决方案是regroup tag,但这并不符合你寻找和依赖项目首先在分组属性上进行排序。

在你看来,你可能想是这样的:

grouped = {} 
for obj in object_list: 
    grouped.setdefault(obj.attr1, {}).setdefault(obj.attr2, []).append(obj) 

这应该给你一本字典,其中键是attr1值,和值是字典映射从attr2值项目列表与这些属性。

相关问题