递归浏览django模板中的字典
Recursively navigating through dictionary in the django template
我有一个未知深度的字典,我想在我的 Django 模板中显示它。该字典表示文件夹内子文件夹的结构。我的目标是将它与父子文件夹一起显示在它们的子文件夹之前,这将缩进以表明它们是该文件夹的子文件夹。
所以用一个例子来解释,如果我有以下字典:
{'Script Hello':
{'Script Hello World':
{'Script Hello World 2': None,
'Script Hello World 3': None}},
'Script Hello World 4': None,
'Script Hello World 5':
{'Script Hello World 6': None}}
我想要这样显示:
. Script Hello
. Script Hello World
. Script Hello World 2
. Script Hello World 3
. Script Hello World 4
. Script Hello World 5
. Script Hello World 6
我已经编写了一个小代码,如果深度最多为 3(以确定我真正想要的),它就可以完成工作,但找不到使其递归的方法。
我的代码是这样的:
{% for key, values in list.items %}
<li> {{ key }}
<ul>
{% for key,values in values.items %}
<li>{{ key }}</li>
<ul>
{% for key,values in values.items %}
<li>{{ key }}</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
</li>
{% endfor %}
我尝试使用 Javascript 创建一个快速功能来浏览我的字典并显示其内容,但是我找不到如何在我的 Js 函数中获取我的字典,我总是得到即使尝试了 .
这样的解决方案,它也逃脱了并且无法使用它
所以我需要你的帮助,以便在我的模板中递归地显示我的字典,这是我没能做到的,即使我已经尝试了所有我能想到的方法。
我认为最简单的解决方案是使用自定义模板标签:
from django.utils.safestring import mark_safe
def get_data(data):
text = "<ul>"
for k, v in data.items():
text += f'<li>{k}<li>'
if isinstance(v, dict):
text += get_data(v) # recursively calling to get the lists
else: # this else block can be removed if you don't need it
text += f'<li>{v}</li>'
text += "</ul>"
return text
@register.filter(is_safe=True)
def render_dict(data):
text = get_data(data)
return mark_safe(text)
可以在 documentation 中找到更多信息。
我有一个未知深度的字典,我想在我的 Django 模板中显示它。该字典表示文件夹内子文件夹的结构。我的目标是将它与父子文件夹一起显示在它们的子文件夹之前,这将缩进以表明它们是该文件夹的子文件夹。
所以用一个例子来解释,如果我有以下字典:
{'Script Hello':
{'Script Hello World':
{'Script Hello World 2': None,
'Script Hello World 3': None}},
'Script Hello World 4': None,
'Script Hello World 5':
{'Script Hello World 6': None}}
我想要这样显示:
. Script Hello
. Script Hello World
. Script Hello World 2
. Script Hello World 3
. Script Hello World 4
. Script Hello World 5
. Script Hello World 6
我已经编写了一个小代码,如果深度最多为 3(以确定我真正想要的),它就可以完成工作,但找不到使其递归的方法。
我的代码是这样的:
{% for key, values in list.items %}
<li> {{ key }}
<ul>
{% for key,values in values.items %}
<li>{{ key }}</li>
<ul>
{% for key,values in values.items %}
<li>{{ key }}</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
</li>
{% endfor %}
我尝试使用 Javascript 创建一个快速功能来浏览我的字典并显示其内容,但是我找不到如何在我的 Js 函数中获取我的字典,我总是得到即使尝试了
所以我需要你的帮助,以便在我的模板中递归地显示我的字典,这是我没能做到的,即使我已经尝试了所有我能想到的方法。
我认为最简单的解决方案是使用自定义模板标签:
from django.utils.safestring import mark_safe
def get_data(data):
text = "<ul>"
for k, v in data.items():
text += f'<li>{k}<li>'
if isinstance(v, dict):
text += get_data(v) # recursively calling to get the lists
else: # this else block can be removed if you don't need it
text += f'<li>{v}</li>'
text += "</ul>"
return text
@register.filter(is_safe=True)
def render_dict(data):
text = get_data(data)
return mark_safe(text)
可以在 documentation 中找到更多信息。