一尘不染

如何使用Django模板渲染树结构(递归)?

django

我的内存中有一个树结构,我想使用Django模板以HTML呈现。

class Node():
  name = "node name"
  children = []

将有一些对象rootNode,并且children是的列表Noderoot将在模板的内容中传递。

我发现这个的如何可能实现一个讨论,但海报表明,这在生产环境中可能不是很好。

有人知道更好的方法吗?


阅读 602

收藏
2020-03-29

共2个答案

一尘不染

我认为规范的答案是:“不要”。

相反,您可能应该做的是在视图代码中分解内容,因此只需遍历模板中的(in | de)凹痕即可。我想我可以通过在循环遍历树时将缩进和缩进附加到列表中,然后将该“旅行”列表发送到模板来做到这一点。(然后,模板将插入该列表<li></li>从该列表中插入,以“理解”它来创建递归结构。)

我也很确定递归地包含模板文件确实是一种错误的方式…

2020-03-29
一尘不染

使用with模板标记,我可以做树/递归列表。

样例代码:

主模板:假设“ all_root_elems”是树的一个或多个根的列表

<ul>
{%for node in all_root_elems %} 
    {%include "tree_view_template.html" %}
{%endfor%}
</ul>

tree_view_template.html呈现nested ul,li并使用node模板变量,如下所示:

<li> {{node.name}}
    {%if node.has_childs %}
        <ul>
         {%for ch in node.all_childs %}
              {%with node=ch template_name="tree_view_template.html" %}
                   {%include template_name%}
              {%endwith%}
         {%endfor%}
         </ul>
    {%endif%}
</li>
2020-03-29