2011-12-28 3 views
1

제목이 불분명 한지는 모르지만 여기에서 설명하려고합니다. 첫 번째 서언 - 내가하려고하는 것은 동일한 속성을 가진 객체의 손실을 보여주고 다른 속성을 기준으로 객체를 그룹화하고자합니다.Django 템플릿 - 다른 위치의 값을 기준으로 요소의 값을 설정하십시오.

  1. 먼저 첫 번째 속성의 모든 고유 값을 얻습니다.
  2. 두 번째 두 번째 특성 값을 모두 구합니다.
  3. 마지막으로 나는 모든 객체의 목록을 가져
  4. 다음
  5. 나는 열 값을 반복 어쩌면 두 속성
  6. 그러나이

일부 개체에 대해 동일한 값이 목록에있는 모든 개체를 표시 어떤 애트리뷰트의 이름을 표시하고 싶지 않으므로 두 번째 애트리뷰트가 아닌 첫 번째 애트리뷰트가 있습니다. 어쩌면이 템플릿 스 니펫을 통해 더 명확하게 알 수 있습니다. 그것은 포함에만 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에 만족하지 않은 경우, 나는 나 자신을 분명히 한 희망이 <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의 값에서 항목의 목록에 사전 매핑입니다 그 속성들과 함께.

관련 문제