Django模板中的"for循环"不起作用

3 投票
2 回答
4704 浏览
提问于 2025-04-17 06:39

我正在尝试创建一些模板标签,这些标签会使用在 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所建议的,使用列表可能会更好。

撰写回答