2010-12-03 112 views
3

我在模板內部有兩個嵌套for循環。我需要獲取自父循環開始以來進行的總迭代。只有當孩子進行迭代時,計數器才需要增加。Django模板:獲取嵌套循環的總迭代計數

例如:

每個循環從1到3(包括)

父環 - 第一迭代

兒童環 - 第三迭代

求購結果:3

父環 - 第二次迭代

兒童環路 - 第一次迭代

通緝的結果:4

有什麼辦法,我可以做到這一點使用標準的Django模板標籤?如果不是,我有什麼選擇?

+0

@jMyles 謝謝。你的帖子很舊,但它幫助我解決了我的問題。在模板中添加「divisibleby:」允許在循環次數達到給定數量時執行一些特定操作(在下面的示例中爲12){籃子中的籃子%} {籃子中的蛋子%} {如果雞蛋總數是12的倍數,則意味着已經找到了十幾個雞蛋#} {%if forloop.counter | add:forloop.parentloop.counter | divisibleby:12%}打雞蛋! {%endfor%} {%endfor%} – 06userit 2017-05-25 13:29:08

回答

2

Write a count template tag它將積累在上下文變量中。

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

我試着編寫一個自定義標記,它在第二個循環的每次迭代中增加一個變量,但當父循環迭代時它會被重置。 – yoshi 2010-12-04 01:19:58

1

你知道嗎,會有多少個循環?

如果是這樣,一個簡單的方法是:

{{forloop.counter |地址:forloop.parentcounter.counter}}等

這是一個有點臭相一相分離的邏輯(@伊格納西奧的建議在這方面肯定會更好),但我認爲如果保持整齊有序,這是可以接受的。

0

要麼你可以使用{{forloop.counter | add:forloop.parentcounter.counter}}但取決於情況,如果你想重置計數器,那麼你需要編寫自己的自定義python方法,以後你可以調用它來自django模板。

就像你的意見添加 -

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) 

後來在你的Django的模板,我們可以稱之爲 「iterator_subtopic」 的方法來增加或重置就像它的價值: -

<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 %} 

所以它會不斷增加價值,我們也可以在需要的地方重置它。