2010-12-03 2 views
3

템플릿 내에서 두 개의 중첩 된 for 루프가 있습니다. 부모가 루프를 시작한 이후 만들어진 총 반복을 가져와야합니다. 카운터는 자식이 반복 할 때만 증가시켜야합니다. 예를 들어Django 템플릿 : 중첩 루프의 총 반복 횟수 얻기

:

각 루프 3 (포함)

부모 루프 1 ~ 간다 - 제 1 회 반복

아이 루프 - 3 반복

구인 결과 : 3

상위 루프 - 두 번째 반복

아이 루프 - 첫번째 반복

구인 결과 : 4

표준 장고 템플릿 태그를 사용하여 나는이 작업을 수행 할 수있는 방법이 있나요? 그렇지 않은 경우 내 옵션은 무엇입니까?

+0

@jMyles 감사합니다. 귀하의 게시물은 꽤 오래된 것이지만 그것은 내 pb를 해결하는 데 도움이되었습니다. 템플릿에 "divisibleby :"를 추가하면 루프 수가 주어진 수 (아래 예에서 12)에 도달 할 때 특정 작업을 수행 할 수 있습니다 (바구니의 바구니 % % {basket.eggs.all %}의 계란 % 총 계란의 수는 12의 배수이면 새로운 다스가 발견되었음을 의미합니다. #} {% if forloop.counter | add : forloop.parentloop.counter | divisibleby : 12 %} 달걀 12 개! {% endif %} {% endfor %} – 06userit

답변

2

Write a count template tag 컨텍스트 변수에 누적됩니다.

{% for ... %} 
    {% for ... %} 
    {% count totalloops %} 
    {% endfor %} 
{% endfor %} 
{{ totalloops }} 
+0

두 번째 루프의 각 반복마다 변수를 증가시키는 맞춤 태그를 작성하려고했지만 부모 루프가 반복 될 때 재설정됩니다. – yoshi

1

얼마나 많은 루프가 있는지 알고 계십니까?

는 그렇다면, 가장 쉬운 방법은 다음과 같습니다

{{forloop.counter가 | 추가 forloop.parentcounter.counter}} 등

그것은 조금 냄새의 마주 마주 로직 분리 (이그나시오의 제안 @ 확실히이 앞면에서 더 낫다). 그러나 그것이 깔끔하고 질서 정연하게 유지된다면 그것은 받아 들일 만하다고 생각한다.

0

{{forloop.counter | add : forloop.parentcounter.counter}}를 사용할 수 있지만 카운터를 재설정하려는 경우 상황에 따라 고유 파이썬 메소드를 작성해야하며 나중에 호출 할 수 있습니다. 그것은 장고 템플릿에서. 그래서

<td id="subTopic" class="subTopic"> 
<p hidden value="{{ iterator_subtopic.res }}"></p> 
{% for strand in scheme_recs.stand_ids.all %} 
    {{ iterator_subtopic.res }} 
    {% for sub_strand in strand.sub_strand_ids.all %} 
     {% for topic in sub_strand.topic_ids.all %} 
      {% for subtopic in topic.sub_topic_ids.all %} 
       <input id="subTopic{{ iterator_subtopic.inc }}" class="len" 
         value="{{ subtopic.name }}"> 
       <br> 
      {% endfor %} 
     {% endfor %} 
    {% endfor %} 
{% endfor %} 

- : 귀하의 의견은 우리가 증가 시키거나 같은 값을 재설정 "iterator_subtopic"메소드를 호출 할 수 있습니다 장고 템플릿에 나중에

class make_incrementor(object): 
count = 0 

def __init__(self, start): 
    self.count = start 

def inc(self, jump=1): 
    self.count += jump 
    return self.count 

def res(self): 
    self.count = 0 
    return self.count 

def EditSchemeDefinition(request, scheme_id): 

iterator_subtopic = make_incrementor(0) 
scheme_recs = scheme.objects.get(id=scheme_id) 
view_val = { 
    'iterator_subtopic': iterator_subtopic, 
    "scheme_recs": scheme_recs, 
} 
return render(request, "edit.html", view_val) 

을 추가 -처럼

값을 계속 증가 시키며 원하는 위치에서 값을 재설정 할 수 있습니다.