Django模板中的"for循环"不起作用
我正在尝试创建一些模板标签,这些标签会使用在 settings.py
文件中的字典来构建一个菜单。
这是我模板中的一部分。
{% for menu_item in menu %}
<li class="single-link"><a href="{{ menu_item.url }}" title="{{ menu_item.caption }}">{{ menu_item.caption }}</a></li>
{% endfor %}
传递给这个标签的上下文包含
context['menu'] = {'keywords': {'url': '#', 'caption': 'test'}, 'start': {'url': '#', 'caption': 'test'}, 'flippa': {'url': '#', 'caption': 'test'}}
{{ menu.start.caption }}
运行得很好,不过在我的循环中,menu_item
只包含 'keywords'
、'start'
或 'flippa'
,而使用 .
访问其他内容根本不行。
有人知道我哪里出错了吗?
声明:我只用了一个星期的时间在学习django和python!
2 个回答
1
你需要把菜单做成一个列表,而不是字典。
比如这样写:context['menu'] = [{'url': '#', 'caption': 'test'},{'url': '#', 'caption': 'test'}, {'url': '#', 'caption': 'test'}]
8
在Django模板中,就像在普通的Python代码里,使用for
循环一个字典时,它只会遍历字典的键。你需要用.items()
这个方法:
{% for key, value in menu.items %}
<li class="single-link"><a href="{{ value.url }}" title="{{ value.caption }}">{{ value.caption }}</a></li>
{% endfor %}
(不过我知道你其实并没有用到键,所以你可以直接用for value in menu.values
来遍历值)。
另外,值得注意的是,字典可能不是存放你这些项目的合适容器,因为字典不能定义顺序。正如armonge所建议的,使用列表可能会更好。