我正在努力学习Django,但我需要帮助,因为我无法理解。
如何迭代我的所有模型而不必为每个级别的任务编写循环?
示例,但是像无限子任务一样:
任务#1
1.1子任务#1
1.2子任务#2
1.2.1子任务#3
任务#2
2.1子任务#4
我的模型本身就有很多很多领域
{% for task in items %}
<li>{{ task.name }}
<ul>
{% for subtask in task.subtask.all %}
<li>{{ subtask.name }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
我的模板
{{1}}
如何将模板标记用于无限循环任务
答案 0 :(得分:1)
您应该使用某种形式的递归。 Django允许递归使用include
模板标记(如本answer中所述):
# tasks.html
{% if items %}
<ul>
{% for task in items %}
<li>
{{ task.name }}
{# recursively include template itself #}
{% with items=task.subtask.all template_name="tasks.html" %}
{% include template_name %}
</li>
{% endfor %}
</ul>
{% endif %}
现在,您可以在任何其他模板中加入"tasks.html"
:
{% include "tasks.html" with items=items %}
实现自定义标记并将递归代码移出模板可能是更好的做法,但原则保持不变。另外,您当前的模型结构不会阻止您的任务图形为圆形:两个任务是彼此的子任务,你最终会得到无限的递归。