我有此方法可返回多维字典。
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',因为它是一本字典。但是,我该如何循环呢?我找到了其他示例,但没有一个对我有用。谢谢!
您可以使用items
循环浏览字典。通常,您想执行以下操作:
由于(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 %}