我在模板內部有兩個嵌套for循環。我需要獲取自父循環開始以來進行的總迭代。只有當孩子進行迭代時,計數器才需要增加。Django模板:獲取嵌套循環的總迭代計數
例如:
每個循環從1到3(包括)
父環 - 第一迭代
兒童環 - 第三迭代
求購結果:3
父環 - 第二次迭代
兒童環路 - 第一次迭代
通緝的結果:4
有什麼辦法,我可以做到這一點使用標準的Django模板標籤?如果不是,我有什麼選擇?
我在模板內部有兩個嵌套for循環。我需要獲取自父循環開始以來進行的總迭代。只有當孩子進行迭代時,計數器才需要增加。Django模板:獲取嵌套循環的總迭代計數
例如:
每個循環從1到3(包括)
父環 - 第一迭代
兒童環 - 第三迭代
求購結果:3
父環 - 第二次迭代
兒童環路 - 第一次迭代
通緝的結果:4
有什麼辦法,我可以做到這一點使用標準的Django模板標籤?如果不是,我有什麼選擇?
Write a count
template tag它將積累在上下文變量中。
{% for ... %}
{% for ... %}
{% count totalloops %}
{% endfor %}
{% endfor %}
{{ totalloops }}
我試着編寫一個自定義標記,它在第二個循環的每次迭代中增加一個變量,但當父循環迭代時它會被重置。 – yoshi 2010-12-04 01:19:58
你知道嗎,會有多少個循環?
如果是這樣,一個簡單的方法是:
{{forloop.counter |地址:forloop.parentcounter.counter}}等
這是一個有點臭相一相分離的邏輯(@伊格納西奧的建議在這方面肯定會更好),但我認爲如果保持整齊有序,這是可以接受的。
要麼你可以使用{{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 %}
所以它會不斷增加價值,我們也可以在需要的地方重置它。
@jMyles 謝謝。你的帖子很舊,但它幫助我解決了我的問題。在模板中添加「divisibleby:」允許在循環次數達到給定數量時執行一些特定操作(在下面的示例中爲12){籃子中的籃子%} {籃子中的蛋子%} {如果雞蛋總數是12的倍數,則意味着已經找到了十幾個雞蛋#} {%if forloop.counter | add:forloop.parentloop.counter | divisibleby:12%}打雞蛋! {%endfor%} {%endfor%} – 06userit 2017-05-25 13:29:08