python - 递归浏览 django 模板中的字典

标签 python django dictionary for-loop django-templates

我有一本未知深度的字典,我想在我的 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函数中那样获取我的字典,我总是将它转义并且没有即使在尝试了像 this one 这样的解决方案之后也能够使用它.

所以我需要你的帮助,以便在我的模板中递归地显示我的字典,即使在尝试了我能想到的所有方法之后,我也未能做到这一点。

最佳答案

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

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 - 递归浏览 django 模板中的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72362845/

相关文章:

python - 如何通过Python帧再现音频信号?

Python-SqlAlchemy : Filter query by great circle distance?

python - 使用 PASSWORD_HASHERS 为 unittest 用户创建一个简单的密码

python - 检查字典键是否在字典列表(元组)中

python - 使用多个字典创建 JSON,Python

python - 嵌套字典理解

python - 从 2014 年的新年挑战中理解这段 Python 代码

python - Flask 发布 JSON

django - 在 Django 中返回 HttpResponse() 时,开发 wsgi 服务器陷入困境(debug=True)

python - Django Elastic Beanstalk 部署显示 404