这是对从dropbox API构建目录树的后续操作
我已经把字典整理好了,这正是我想要的。但现在我想写一个模板标签把这个嵌套结构写成html格式,比如:<ul>
<li>
Dir/
<ul>
<li>
Dir2/
...
</li>
<li>Inner File</li>
</ul>
</li>
<li>File1</li>
<li>File2</li>
</ul>
我所能想到的是一个递归生成器,它可以得到文件和目录,我可以把它们放在一个平面列表中,但是我不知道如何让嵌套工作,以及如何把html放在正确的位置。
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
模板标签:
@register.simple_tag()
def dropbox_files():
files = function_from_other_question()
s = '<ul>'
for key, value in recurse(files):
s += '<li>{}</li>'.format(key)
s += '</ul>'
return s
这得到了所有的路径,但正如我所说的,没有任何嵌套结构。
您可以使用模板包括:
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 %}