Django模板标记来递归嵌套的dict

时间:2015-07-22 12:06:26

标签: python django

这是Build directory tree from dropbox API

的后续内容

我已经整理了我的字典,这就是我想要的方式。但现在我想写一个模板标签,将这个嵌套结构写成html,如:

array4

所有我能够想出的是一个递归生成器,它可以获取文件和目录,我可以将它们放在一个平面列表中,但我无法弄清楚如何获取嵌套工作,以及如何将html放在正确的位置。

<ul>
    <li>
        Dir/
        <ul>
            <li>
                Dir2/
                ...
            </li>
            <li>Inner File</li>
        </ul>
    </li>
    <li>File1</li>
    <li>File2</li>
</ul>

模板标签:

def recurse(d):
    for key, value in d.items():
        if value['contents']:
            for inner_key, inner_value in recurse(value['contents']):
                yield inner_key, inner_value
        else:
            yield key, value

这让我获得了所有路径,但正如我所说,没有任何嵌套结构。

1 个答案:

答案 0 :(得分:0)

您可以使用模板包括:

recurse_dict.html

{% if dict and dict.keys|length > 0 %}
<ul>
    {% for key, value in dict.items %}
        <li>
            {% if value and value.keys|length > 0 %}
               {{ key }} {% include "recurse_dict.html" with dict=value %}
            {% else %}
               {{ value }}
            {% endif %}
        </li>
    {% endfor %}
</ul>
{% endif %}