我需要创建N个菜单项,可能有N个孩子。
这适用于一个级别。
items = {'link1': 'value1',
'link2': 'value2',
'link3': 'value3'
}
<nav id="menu">
<ul>
{% for key in items %}
<li>
<a href="{{ escape(key) }}"> {{ escape(items[key]) }}</a>
</li
{% end %}
</ul>
</nav>
那将输出:
<nav id="menu">
<ul>
<li>
<a href="link1"> value1</a>
</li>
<li>
<a href="link2"> value2</a>
</li>
<li>
<a href="link3"> value3</a>
</li>
</ul>
</nav>
但如果我有这样一个更复杂的结构,怎么办呢?
level 1
level 1.1
level 1.2
level 1.3
level 2
level 2.1
level 2.1.1
level 2.1.1.1
level 2.1.2
level 3
level 3.1
level 3.2
答案 0 :(得分:1)
改为使用dicts列表,并允许每个dict都有一个“children”键。 “两级”菜单的示例:
items = [
{'label': 'label1',
'link': 'link1',
'children': [
{'label':'label1.1', 'link': 'link1.1'},
{'label':'label1.2', 'link': 'link1.2'}
]
},
{'label': 'label2',
'link': 'link2',
'children': [
{'label':'label2.1', 'link': 'link2.1'},
{'label':'label2.2', 'link': 'link2.2'}
]
},
# etc
]
然后在你的模板中:
<nav id="menu">
<ul>
{% for item in items %}
<li>
<a href="{{ escape(item['link']) }}"> {{ escape(item['label']) }}</a>
{% if 'children' in item %}
<ul>
{% for child in item['children'] %}
<li>
<a href="{{ escape(child['link']) }}"> {{ escape(child['label']) }}</a>
</li>
{% end %}
</ul>
{% end %}
</li
{% end %}
</ul>
</nav>
如果你想能够处理任何仲裁深度,你需要在你的模板中使用一些递归机制,但由于我不知道你正在使用什么模板引擎,我在这里帮不了多。
答案 1 :(得分:0)
有一种方法可以执行此迭代,这就是了解它的类型。所以,假设你有列表,在这个列表中你有字符串和列表。所以,这就是我要做的事情:
{% if key.get_type == "list" %}
{% for var in key %}
... (this will only work for as many levels as you define)
答案 2 :(得分:0)
要将输出视为嵌套列表,请使用以下命令:
(我假设您已经拥有类似格式的items
字典。)
items = [
{'link': 'link1','value': 'value1',
'sub_items': [
{'link':'link1.1','value':'value1.1'},
{'link':'link1.2','value':'value1.2'},
{'link':'link1.3','value':'value1.3'},
]
},
{'link': 'link2','value': 'value2',
'sub_items': [
{'link':'link2.1','value':'value2.1',
'sub_items': [
{'link':'link2.1.1','value':'value2.1.1',
'sub_items': [
{'link':'link2.1','value':'value2.1.1.1'}
]
}
]
}
]
},
{'link': 'link3','value': 'value3',
'sub_items': [
{'link':'link3.1','value':'value3.1'}
]
}
]
在你的模板中:
<nav id="menu">
<ul>
{% for item in items %}
<li>
<a href="{{ item.link }}"> {{ item.value }}</a>
{% if item.sub_items %}
<ul>
{% for item2 in item.sub_items %}
<li>
<a href="{{ item2.link }}"> {{ item2.value }}</a>
{% if item2.sub_items %}
<ul>
{% for item3 in item2.sub_items %}
<li>
<a href="{{ item3.link }}"> {{ item3.value }}</a>
{% if item3.sub_items %}
<ul>
{% for item4 in item3.sub_items %}
<li>
<a href="{{ item4.link }}"> {{ item4.value }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{%endfor%}
</ul>
{% endif %}
</li>
{%endfor%}
</ul>
{% endif %}
</li>
{%endfor%}
</ul>
</nav>
它将产生所需的输出。