与多维词典混淆

问题描述 投票:0回答:1

我有此方法可返回多维字典。

def get_apps():
    menu_one = {
        'name': 'Apps group one',
        'menu_one_app_one': {
            'name': 'app one!',
            'icon': 'fa-rocket',
            'url': '/Url'
        },
        'menu_one_app_two': {
            'name': 'app two!',
            'icon': 'fa-user',
            'url': '/Url2'
        }
    },
    menu_two = {
        'name': 'Apps group two',
        'menu_two_app_one': {
            'name': 'app three!',
            'icon': 'fa-clipboard',
            'url': '/Url3'
        },
        'menu_two_app_two': {
            'name': 'app four!',
            'icon': 'fa-users',
            'url': '/Url4'
        }
    }
    return menu_one, menu_two

因此,在我的Django视图中,我正在调用方法get_apps(),以获取具有其属性的应用程序,并将它们显示在这样的不同组上:

def my_django_view(request):
    apps = get_apps()
    return render(request, "apps.html", {'apps': apps})

并且想法是像这样在我的模板中按组显示它们:

{% for menu in apps %} <!-- this is ok! -->
    <div class="breadcrumb">        
        <h1>{{ menu.name }}</h1>
        {% for app in menu %} <!-- here is the part where I am wrong -->
            <a href="{{ app.url }}"
               data-toggle="tooltip"
               title="{{ app.name }}">
                <i class="fa {{ app.icon }}"></i>
            </a>
        {% endfor %}
    </div>
{% endfor %}

我知道django出了什么问题,因为它说'str'没有attr'name',因为它是一本字典。但是,我该如何循环呢?我找到了其他示例,但没有一个对我有用。谢谢!

python django loops dictionary
1个回答
0
投票

您可以使用items循环浏览字典。通常,您想执行以下操作:

  1. 循环浏览各个菜单
  2. 循环浏览每个菜单中的每个子菜单

由于(2),最好通过数组定义每个菜单:

    menu_one = {
        'name': 'Apps group one',
        'menus': [{
            'name': 'app one!',
            'icon': 'fa-rocket',
            'url': '/Url'
        }, {
            'name': 'app two!',
            'icon': 'fa-user',
            'url': '/Url2'
        }],
    }

现在我们的菜单是一个数组,使用它们要容易得多:

{% for menu in apps %} <!-- this is ok! -->
    <div class="breadcrumb">        
        <h1>{{ menu.name }}</h1>
        {% for app in menu.menus %} 
            <a href="{{ app.url }}"
               data-toggle="tooltip"
               title="{{ app.name }}">
                <i class="fa {{ app.icon }}"></i>
            </a>
        {% endfor %}
    </div>
{% endfor %}
© www.soinside.com 2019 - 2024. All rights reserved.