我有一个未知深度的字典,我想在Django模板中显示它.此词典表示文件夹中子文件夹的 struct .我的目标是在子文件夹之前显示父文件夹,子文件夹将缩进以显示它们是该文件夹的子文件夹.

因此,如果我有以下词典,请举例说明:

{'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 %}

我try 使用Javascript创建一个快速函数来浏览我的字典并显示其内容,但是我找不到如何像Js函数中那样获取字典,我总是将其转义,即使try 了this one这样的解决方案,也无法使用它.

因此,我希望您的帮助,以便在我的模板中递归显示我的词典,这是我没有做到的,即使在try 了我所能想到的一切之后.

推荐答案

我认为最简单的解决方案是使用自定义模板标记:

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中找到.

Python相关问答推荐

计算组中唯一值的数量

Python虚拟环境的轻量级使用

从groupby执行计算后创建新的子框架

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

如何使用Python以编程方式判断和检索Angular网站的动态内容?

在Python argparse包中添加formatter_class MetavarTypeHelpFormatter时, - help不再工作""""

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

为什么\b在这个正则表达式中不解释为反斜杠

无法在Spyder上的Pandas中将本地CSV转换为数据帧

从嵌套极轴列的列表中删除元素

504未连接IB API TWS错误—即使API连接显示已接受''

为罕见情况下的回退None值键入

Django抛出重复的键值违反唯一约束错误

将相应的值从第2列合并到第1列(Pandas )

Groupby并在组内比较单独行上的两个时间戳

在不降低分辨率的情况下绘制一组数据点的最外轮廓

保存由PYTHON在EXCEL中所做更改的问题

打印:添加具有不同填充 colored颜色 的矩形

Networkx中K-Shell最核心的 node

使用Mysql Connector通过Python创建Mysql Storec过程