Django Template - 根据其他位置的某个值设置元素的值

时间:2011-12-28 19:05:36

标签: django django-templates

我不知道标题是否不清楚,但我会在这里解释一下。首先是一些前言 - 我要做的是显示丢失具有相同属性的对象,并且我希望根据另一个属性对它们进行分组。

  1. 首先,我获得第一个属性的所有不同值。
  2. 其次,我得到第二个属性的所有不同值。
  3. 最后我得到了所有对象的列表
  4. 然后我迭代列值并显示列表中具有相同值的两个属性的所有对象
  5. 然而,可能有一些对象具有第一个属性而不是第二个属性,因此我不想显示该属性的名称。也许这个模板片段会让它更清晰。它仅包含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 %}
    

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

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

2 个答案:

答案 0 :(得分:2)

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

在您看来,您可能想要这样的内容:

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

这应该为您提供一个字典,其中键的值为attr1,值为字典,从attr2的值映射到具有这些属性的项目列表。

答案 1 :(得分:1)

这种逻辑更恰当地放在视图中而不是模板中。您可以在视图中非常轻松地过滤这些对象,然后仅将符合条件的对象作为上下文中的命名值传递。我会给你一些代码,但我不知道你正在使用什么数据。