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

时间:2020-03-05 18:44:19  来源:igfitidea点击:

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

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

将有一些对象" root"是" Node",而" children"是" Node"的列表。 " root"将在模板的内容中传递。

我已经找到了关于如何实现这一目标的讨论,但是张贴者认为这在生产环境中可能不是很好。

有人知道更好的方法吗?

解决方案

回答

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

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

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

回答

这可能比我们需要的更多,但是有一个名为" mptt"的django模块,该模块将分层树结构存储在sql数据库中,并包括用于在视图代码中显示的模板。我们也许可以在那里找到有用的东西。

这是链接:django-mptt

回答

我遇到了类似的问题,但是我首先使用JavaScript实现了该解决方案,然后才考虑了如何在django模板中完成相同的工作。

我使用序列化程序实用程序将模型列表转换为json,并将json数据用作层次结构的基础。

回答

Django在此确切场景中具有内置的模板帮助器:

https://docs.djangoproject.com/zh-CN/dev/ref/templates/builtins/#unordered-list

回答

我有同样的问题,我写了一个模板标签。我知道那里还有其他这样的标签,但无论如何我都需要学习制作自定义标签:)我认为效果很好。

阅读文档字符串以获取用法说明。

github.com/skid/django-recurse