簡體   English   中英

遞歸瀏覽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)

更多信息可以在文檔中找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM