我在内存中有一个树结构,我想使用Django模板在HTML中呈现.
class Node(): name = "node name" children = []
将有一些对象root
是a Node
,并且children
是Node
s 的列表.root
将在模板的内容中传递.
我已经找到了关于如何实现这一点的讨论,但是海报表明这在生产环境中可能并不好.
有人知道更好的方法吗?
使用with
模板标签,我可以做树/递归列表.
示例代码:
主模板:假设'all_root_elems'是一个或多个树根的列表
tree_view_template.html呈现嵌套ul
,li
并使用node
模板变量,如下所示:
我认为规范的答案是:"不要".
你可能应该做的是解开你的视图代码中的东西,所以这只是在模板中迭代(in | de)凹痕的问题.我想我会通过在列表中附加缩进和dedents来实现它,同时通过树递归然后将"travelogue"列表发送到模板.(然后模板将插入并
从该列表中创建具有"理解"它的递归结构.)
我也很确定递归包含模板文件真的是一种错误的方法...
这可能比你需要的更多,但是有一个名为'mptt'的django模块 - 它在sql数据库中存储一个分层树结构,并包含在视图代码中显示的模板.你可能会在那里找到有用的东西.
这是链接:django-mptt
我来不及)所有的你用这么多的不必要的与标签,这是我该怎么办recuesive:
在主模板中:
然后在menu.html中:
{% for menu in menu_list %}
是的,你可以做到.这是一个小技巧,将文件名作为变量传递给{%include%}:
{% with template_name="file/to_include.html" %} {% include template_name %} {% endwith %}
对于这个确切的场景,Django有一个内置的模板助手:
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#unordered-list
我有同样的问题,我写了一个模板标签.我知道还有其他像这样的标签,但我还是需要学习制作自定义标签:)我认为结果非常好.
阅读docstring了解使用说明.
github.com/skid/django-recurse